小数と分数を表すclassなど似たような役割なら、 classを超えてComparable
でもいっか、 とか思ってしまって反省しています。
Effective Javaにあるんですね、 【Effective Java】項目12:Comparable の実装を検討するって。 compareTo
を定義するならequals
とhashCode
も定義すべきだし、 a.compareTo(b)==0
とa.equals(b)==true
が違うなら、 compareTo
で比較するTreeSet
とequals
で比較するHashSet
で 結果が違っちゃうんですね。 compareTo
が違うclassの比較を許すなら、 equals
でも許さねばならず、 流石にそれはおかしいだろう、 ということでしょうか。 実際、
クラスが適切にパラメータ化されていれば、ClassCastExceptionがスローされます。 契約は、クラス間の比較を排除してはいませんが、 リリース1.6では、Javaプラットフォームライブラリーのどのクラスも、 クラス間の比較をサポートしません。