2013-03-08 19 views
10

Tworzę niestandardową klasę, która implementuje porównywalną i chciałbym rzucić jakiś wyjątek, jeśli ktoś spróbuje porównać dwa obiekty, które nie są porównywalne według mojej definicji. Czy istnieje już odpowiedni wyjątek w interfejsie API lub czy muszę tworzyć własne?Wyjątek "nieporównywalny" w języku Java?

Odpowiedz

2

Weźmy pod uwagę wyjątek ClassCastException, który Java Collection Framework rzuca w takich sytuacjach. To co się dzieje, gdy staramy się dodać nieporównywalnych Test1 do 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 dla wyjątku ClassCastException. Jest to wymienione w compareTo javadoc: https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T-. Ale najlepiej, jak mówi Cory Kendall powyżej, powinieneś spróbować wymyślić hierarchię klas, która temu zapobiega. – philo