有谁知道为什么 java.lang.Number
不实施Comparable
?这意味着您不能对Number
s 进行排序,Collections.sort
这在我看来有点奇怪。
发布讨论更新:
感谢所有有用的回复。我最终对这个主题做了更多的研究。
为什么 java.lang.Number 不实现 Comparable 的最简单解释源于可变性问题。
稍微回顾一下,是, , , , , , , , andjava.lang.Number
的抽象超类型。在那个列表上,并且不执行.AtomicInteger
AtomicLong
BigDecimal
BigInteger
Byte
Double
Float
Integer
Long
Short
AtomicInteger
AtomicLong
Comparable
挖掘了一下,我发现Comparable
在可变类型上实现并不是一个好习惯,因为在比较期间或之后对象可能会发生变化,从而使比较结果变得无用。AtomicLong
和都是AtomicInteger
可变的。API 设计者有先见之明没有Number
实现Comparable
,因为它会限制未来子类型的实现。确实,AtomicLong
并且在最初实现AtomicInteger
之后很久就被添加到 Java 1.5中。java.lang.Number
除了可变性之外,这里可能还有其他考虑因素。一个compareTo
实现Number
必须将所有数值提升为,BigDecimal
因为它能够容纳所有Number
子类型。这种提升在数学和性能方面的含义对我来说有点不清楚,但我的直觉发现这个解决方案很笨拙。