2013-03-08 15 views
10

私は同等クラスを実装するカスタムクラスを作成しています。私の定義では比較できない2つのオブジェクトを比較しようとすると、何らかの例外をスローしたいと思います。 APIに既に適切な例外がありますか、自分で作る必要がありますか?java「比較できない」例外?

答えて

8

わかりません。

これを表現するための最も正確な例外は、おそらくIllegalArgumentExceptionです: http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html

あなたはおそらく間違ったクラスのインスタンスを提供するから発信者を防ぐことができますどのComparable<CustomClass>を実装する必要があります。

+0

1に非匹敵するのTest1を追加しようとすると何が起こるかです。 –

2

ClassCastExceptionを考慮すると、Java Collection Frameworkがそのような状況でスローするものです。これは、我々は `匹敵 `インタフェースのためのTreeSetの

Exception in thread "main" java.lang.ClassCastException: Test1 cannot be cast to java.lang.Comparable 
    at java.util.TreeMap.compare(TreeMap.java:1188) 
    at java.util.TreeMap.put(TreeMap.java:531) 
    at java.util.TreeSet.add(TreeSet.java:255) 
    at java.util.AbstractCollection.addAll(AbstractCollection.java:334) 
    at java.util.TreeSet.addAll(TreeSet.java:312) 
    at java.util.TreeSet.<init>(TreeSet.java:160) 
    at Test1.main(Test1.java:9) 
+0

ClassCastExceptionの+1。これは、compareTo javadoc:https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T-で参照されています。しかし理想的には、上記のようにCory Kendallが述べているように、これを防ぐクラス階層を作り出すべきです。 – philo