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
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.
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)
+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
+1 für die 'Vergleichbare' Schnittstelle hinzuzufügen. –