Sto creando una classe personalizzata che implementa comparabili e mi piacerebbe lanciare qualche tipo di eccezione se qualcuno cerca di confrontare due oggetti che non sono confrontabili con la mia definizione. Esiste già un'eccezione valida nell'API o devo creare il mio?java "non confrontabile" eccezione?
risposta
Non che io sappia.
L'eccezione più accurato per rappresentare questo è probabilmente un IllegalArgumentException
: http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html
Probabilmente si dovrebbe anche essere implementando Comparable<CustomClass>
che impedirà ai chiamanti di fornire un'istanza della classe sbagliata.
Considera ClassCastException, è ciò che Java Collection Framework genera per tali situazioni. Questo è ciò che accade quando cerchiamo di aggiungere un Test1 non paragonabile ad un 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 per ClassCastException. Questo è il riferimento in compareTo javadoc: https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html#compareTo-T-. Ma idealmente, come dice Cory Kendall sopra, dovresti cercare di creare una gerarchia di classi che impedisca questo. – philo
+1 per la '' interfaccia Comparable. –