Tag: 媲美

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

有谁知道为什么java.lang.Number不实现Comparable ? 这意味着你不能对Number和Collections.sort进行sorting,这在我看来有点奇怪。 讨论后更新: 感谢所有有用的回应。 我最终做了一些关于这个话题的研究 。 为什么java.lang.Number没有实现Comparable的最简单的解释根源于可变性问题。 对于一些评论, java.lang.Number是AtomicInteger , AtomicLong , BigDecimal , BigInteger , Byte , Double , Float , Integer , Long和Short的抽象超types。 在那个列表中, AtomicInteger和AtomicLong没有实现Comparable 。 四处挖掘,我发现在可变types上实现Comparable并不是一个好习惯,因为在比较的过程中或之后,对象可能会发生变化,从而导致比较结果无用。 AtomicLong和AtomicInteger都是可变的。 APIdevise人员有预期没有Number实现Comparable因为它会限制未来子types的实现。 的确, AtomicLong和AtomicInteger是在java.lang.Number最初实现之后的Java 1.5版本中添加的。 除了可变性之外,这里也可能有其他的考虑。 Number的compareTo实现必须将所有的数值提升为BigDecimal因为它能够容纳所有的Number子types。 这种提升在math和表演方面的含义对我而言有点不清楚,但是我的直觉发现了这个解决scheme。