Я создаю пользовательский класс, который реализует сопоставимые данные, и я хотел бы бросить какое-то исключение, если кто-то попытается сравнить два объекта, которые не сопоставимы по моему определению. Есть ли подходящее исключение уже в API, или мне нужно сделать свой собственный?
Java "несопоставимое" исключение?
Ответ 1
Не то, чтобы я знал.
Наиболее точным исключением для представления этого является, вероятно, IllegalArgumentException
:
http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html
Вероятно, вы также должны реализовать Comparable<CustomClass>
, который запретит вызывающим абонентам предоставлять экземпляр неправильного класса.
Ответ 2
Рассмотрим ClassCastException, это то, что создает Java Collection Framework для таких ситуаций. Это то, что происходит, когда мы пытаемся добавить несопоставимый Test1 в 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)