5

我正在Comparable一个包含单个int成员的普通类上实现接口。

我可以这样实现:

    @Override
    public int compareTo ( final MyType o )
    {
        return
            Integer.valueOf( this.intVal ).compareTo(
                Integer.valueOf( o.intVal )
            );
    }

但这(也许)创建了 2 个完全不必要的 Integer 对象。

或者我可以从 Integer 类尝试真正的剪切和粘贴方法:

    @Override
    public int compareTo ( final MyType o )
    {
      int thisVal = this.intValue;
      int anotherVal = o.intValue;
      return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
    }

这非常有效,但不需要重复代码。

是否有一个库可以实现这个缺失的Integer(以及 Double 和 Float )方法?

   public static int compare ( int v1, int v2 );
4

4 回答 4

6

在 Java 7 中,static int compare对于原始类型已添加到所有原始对象包装类中,即现在有:

java.lang.Integer: static int compare( int x, int y );
java.lang.Byte: static int compare( byte x, byte y );
java.lang.Short: static int compare( short x, short y );
etc...
于 2013-07-31T11:07:52.803 回答
6
  • 对于int,编写自己的compare方法(最多需要三行代码)。
  • 对于double,使用Double.compare(不要与 混淆 compareTo)。
  • 对于float,使用Float.compare

最后两个采用原始类型,从而避免装箱和拆箱。Integer我可以看到提供类似方法的论点compare,但事实并非如此。

于 2011-09-01T16:14:13.253 回答
2

也许,我错过了一些东西,但恕我直言,这是一个奇怪的问题。

是否有一个库可以实现这个缺失的Integer(以及 Double 和 Float )方法?

public static int compare ( int v1, int v2 );

好吧,我认为这可以完成工作:

public static int compare ( int v1, int v2 )
{
    if (v1 < v2) return -1;
    if (v1 > v2) return  1;
    return 0;
}
于 2011-09-01T16:10:20.417 回答
-1

这个解决方案很简单,但可能过于简单:

public static int compare ( int v1, int v2 )
{
    return v1 - v2;
}

注意:@aix 是正确的!这种方法不适用于任意整数。它适用于始终为正的整数,例如自动生成的数据库键等

于 2011-09-01T16:16:23.917 回答