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