有人知道为什么 java.lang.Number不实现 Comparable吗?这意味着你不能用 Collections.sort对 Number进行排序,这在我看来有点奇怪。
讨论后更新:
感谢所有有帮助的回答。我最后做了 关于这个话题的更多研究。
为什么 java.lang.Number 没有实现 Comparable,最简单的解释是基于可变性的考虑。
回顾一下,java.lang.Number是 AtomicInteger、 AtomicLong、 BigDecimal、 BigInteger、 Byte、 Double、 Float、 Integer、 Long和 AtomicInteger0的抽象超级类型。在这个列表中,AtomicInteger和 AtomicLong不实现 AtomicInteger3。
深入研究之后,我发现在可变类型上实现 Comparable并不是一个好的实践,因为对象可能在比较期间或比较之后发生变化,从而使比较结果变得无用。AtomicLong和 AtomicInteger都是可变的。API 设计人员预先考虑过不让 Number实现 Comparable,因为这会限制未来子类型的实现。事实上,AtomicLong和 AtomicInteger是在最初实现 java.lang.Number很久之后在 Java 1.5中添加的。
除了可变性,这里可能还有其他考虑因素。Number中的 compareTo实现必须将所有数值提升到 BigDecimal,因为它能够容纳所有的 Number子类型。在数学和性能方面,这种提升的含义对我来说有点不清楚,但是我的直觉认为这种解决方案是不合理的。