なぜ java.lang.Number実装しないのか誰かが知っていますComparableか?これは、私には少し奇妙に思えるNumbersを並べ替えることができないことを意味します。Collections.sort
ディスカッションの更新後:
すべての有益な回答をありがとう。私はこのトピックについてさらに調査を行うことになりました。
java.lang.NumberがComparableを実装しない理由の最も簡単な説明は、可変性の懸念に根ざしています。
少しレビューすると、は、、、、、、、、、、、およびの抽象的なスーパーjava.lang.Numberタイプです。そのリストにあり、実装しないでください。AtomicIntegerAtomicLongBigDecimalBigIntegerByteDoubleFloatIntegerLongShortAtomicIntegerAtomicLongComparable
Comparable掘り下げてみると、比較中または比較後にオブジェクトが変更され、比較の結果が役に立たなくなる可能性があるため、可変型に実装するのは適切ではないことがわかりました。AtomicLongとは両方ともAtomicInteger変更可能です。API設計者は、将来のサブタイプの実装を制約するため、Number実装しないことを事前に考えていました。Comparable確かに、AtomicLongそして最初に実装されAtomicIntegerてからずっと後にJava1.5で追加されました。java.lang.Number
可変性とは別に、ここでもおそらく他の考慮事項があります。のcompareTo実装では、すべてのサブタイプに対応できるため、Numberすべての数値をにプロモートする必要があります。数学とパフォーマンスの観点からのその昇進の意味は私には少し不明確ですが、私の直感はその解決策が厄介であると感じています。BigDecimalNumber