相关疑难解决方法(0)

Java和C#中的int和Integer有什么区别?

当我遇到Joel Spolsky时,我正在阅读更多关于Joel on Software的文章,说明一种特定类型的程序员知道a 和Java/C#(面向对象编程语言)之间的区别.intInteger

那么区别是什么呢?

c# java int integer

256
推荐指数
14
解决办法
24万
查看次数

为什么java.lang.Number没有实现Comparable?

有谁知道为什么 java.lang.Number不实施Comparable?这意味着你无法排序Numbers的Collections.sort这对我来说有点陌生.

发布讨论更新:

感谢所有有用的回复.我最后对这个话题进行了更多的研究.

java.lang.Number未实现Comparable的原因的最简单解释源于可变性问题.

对于位的检讨,java.lang.Number是抽象的超类型的AtomicInteger,AtomicLong,BigDecimal,BigInteger,Byte,Double,Float,Integer,LongShort.在那个列表上,AtomicIntegerAtomicLong没有实现Comparable.

四处搜索,我发现Comparable在可变类型上实现这不是一个好习惯,因为对象在比较期间或之后可能会发生变化,因此比较结果无用.这两个AtomicLongAtomicInteger是可变的.API设计者已经预见到没有Number实现,Comparable因为它会限制未来子类型的实现.确实,AtomicLong并且AtomicIntegerjava.lang.Number最初实现之后很久就被添加到Java 1.5中.

除了可变性之外,这里也可能有其他考虑因素.一compareTo实施Number就必须促进所有的数字值BigDecimal,因为它是能够容纳所有的Number子类型.这种促销在数学和表现方面的含义对我来说有点不清楚,但我的直觉发现了解决方案.

java sorting comparable

132
推荐指数
4
解决办法
3万
查看次数

比较两个通用数字的值

我想比较两种类型的变量T extends Number.现在我想知道这两个变量中哪一个大于另一个或相等.不幸的是我还不知道确切的类型,我只知道它将是一个子类型java.lang.Number.我怎样才能做到这一点?

编辑:我试图用另一种解决方法TreeSets,这实际上自然排序工作(当然它的工作原理,所有的子类Number实现Comparable除的AtomicInteger和AtomicLong的).因此,我将丢失重复值.使用Lists时,Collection.sort()由于绑定不匹配,不接受我的列表.非常不满意.

java generics numbers comparable

55
推荐指数
5
解决办法
4万
查看次数

如何在Java中比较两个数字?

可能重复:
比较两个通用数字的值

我想比较两个任意的Number实例来找出哪个更大.如您所知,这些可能是整数,长整数或双数,但也可能是BigIntegers或BigDecimals.那么该怎么办?

  1. Number没有实现Comparable.
  2. 无法使用,doubleValue()因为BigDecimals或BigIntegers可能会丢失精度.

我真的必须进行实例测试和投射吗?这里必须有一些库,做到这一点.但我已经检查过Apache Commons和Guava没有运气.

编辑1:评论指出了这一点:比较两个通用数字的值.它有一个解决方案,使用将所有内容转换为BigDecimal toString().真的没有更好的方法吗?

编辑2:我刚发布了自己的版本作为另一个问题的答案.它应该比公认的答案更有效和更强大.

java compare numbers

20
推荐指数
2
解决办法
3万
查看次数

断言等于int long float

是否有一种优雅的方式断言数字是平等的,而忽略了他们的类?我想在JUnit测试框架中使用它,例如

Assert.assertEquals(1,1L)
Run Code Online (Sandbox Code Playgroud)

失败的java.lang.AssertionError:expected:java.lang.Integer <1>但是:java.lang.Long <1>

我希望有一个很好的方法,只比较值,并使用int,long,float,byte,double,BigDecimal,BigInteger,你命名它...

java junit

19
推荐指数
2
解决办法
2万
查看次数

克服Java中的类型擦除

我有一个客户类,我无法改变.

List<Integer> list1= Arrays.asList(1,2,3);
System.out.println("Total sum is:"+sum(list1));
printlist(list1);
List<Double> list2=Arrays.asList(1.0,2.0,3.0);
System.out.println("Total sum is:"+sum(list2));
printlist(list2);
Run Code Online (Sandbox Code Playgroud)

我在这里有业务逻辑

private static Object sum(List<? extends Number> list) {
    double sum = 0;
    for (Number i: list) {
        sum+=i.doubleValue();
    }     
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

所以我想返回6表示整数,6.0表示双精度数.我怎样才能做到这一点?我想根据类型将类型转换为int或double,但由于类型擦除,所有信息都会丢失.有人能帮我吗?

java generics type-erasure

0
推荐指数
1
解决办法
118
查看次数

Java 泛型方法在数字比较时失败

请参阅下面的小方法。该boo1 = ...线路运行良好,可能是因为它进行对象 ID 比较。第二boo2 = ...行给出编译错误“运算符>无法应用于 T,T”。我不明白为什么。毕竟T extends Number(正如您在方法签名中看到的那样),因此类似的比较>应该是可能的。我究竟做错了什么?

public static <T extends Number> int[] where(T[] arr, T val) {
        if (arr == null || arr.length == 0) return null;

        boolean boo1 = arr[0] == val; //Compiles happily, as does "!="
        boolean boo2 = arr[0] > val;  //Doesn't compile (nor does ">=", "<", "<="

        return null;
    }
Run Code Online (Sandbox Code Playgroud)

java generics

0
推荐指数
1
解决办法
112
查看次数

标签 统计

java ×7

generics ×3

comparable ×2

numbers ×2

c# ×1

compare ×1

int ×1

integer ×1

junit ×1

sorting ×1

type-erasure ×1