2013-03-08 6 views
10

Ich mache eine benutzerdefinierte Klasse, die vergleichbare implementiert, und ich würde gerne eine Art von Ausnahme werfen, wenn jemand versucht, zwei Objekte zu vergleichen, die nicht durch meine Definition vergleichbar sind. Gibt es bereits eine geeignete Ausnahme in der API oder muss ich meine eigene erstellen?Java "nicht vergleichbar" Ausnahme?

Antwort

8

Nicht, dass ich weiß.

Die genaueste Ausnahme darzustellen dies wahrscheinlich ein IllegalArgumentException ist: http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html

Sie sollten wahrscheinlich auch Comparable<CustomClass> implementieren, die Anrufer von der Bereitstellung einer Instanz der falschen Klasse verhindern.

+0

+1 für die 'Vergleichbare ' Schnittstelle hinzuzufügen. –

2

Betrachten Sie ClassCastException, es ist, was Java Collection Framework für solche Situationen auslöst. Dies ist, was passiert, wenn wir versuchen, eine nicht vergleichbare Test1 zu einem 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

+1 für ClassCastException. Dies wird im Vergleich zu javadoc referenziert: https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T-. Aber im Idealfall sollte Cory Kendall versuchen, eine Klassenhierarchie zu entwickeln, die das verhindert. – philo