有人知道为什么 java.lang.Number
没有实现 Comparable
吗?这意味着您无法使用 Collections.sort
对 Number
进行排序,这似乎有点奇怪。
帖子讨论更新:
感谢所有有用的回复。最终我又做了一些关于这个问题的研究。
java.lang.Number
是 AtomicInteger
、AtomicLong
、BigDecimal
、BigInteger
、Byte
、Double
、Float
、Integer
、Long
以及 Short
的抽象超类型。在该列表中,AtomicInteger
和 AtomicLong
都没有实现 Comparable
接口。
通过调查,我发现将可变类型实现 Comparable
不是一个好的实践,因为对象可以在比较期间或之后发生更改,使比较结果无效。 AtomicLong
和 AtomicInteger
都是可变的。API 设计人员有预见性,没有让 Number
实现 Comparable
接口,因为这将限制未来子类型的实现。事实上,在最初实现 java.lang.Number
之后很久,AtomicLong
和 AtomicInteger
才被添加到 Java 1.5 中。
Number
中实现compareTo
需要将所有数字值提升为BigDecimal
,因为它能够容纳所有Number
子类型。在数学和性能方面,这种升级的含义有点不清楚,但我的直觉认为这种解决方案很笨拙。