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