相关疑难解决方法(0)

为什么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万
查看次数

标签 统计

comparable ×1

java ×1

sorting ×1