je travaillais avec TreeSet
et trouvé un ClassCastException
tout en appelant la méthode TreeSet#add()
.Pourquoi TreeSet a déclaré TreeSet <E> au lieu de TreeSet <E étend Comparable <E>>
code:
public class Testing {
public static void main(String[] args) {
TreeSet<Testing> ts = new TreeSet<>();
ts.add(new Testing());
}
}
Sortie:
Exception in thread "main" java.lang.ClassCastException: Testing cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1290)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at Testing.main(Testing.java:13)
Il est clair que c'est parce que TreeSet
est une collection ordonnée et il a besoin de les commander Comparable
objets, alors pourquoi ne pas déclarer son tapez
public class TreeSet<E extends Comparable<E>>
et de faire la vérification au cours de la compilation au lieu de jeter exception au moment de l'exécution?
Je suppose que j'ai demandé trop vite sans passer par l'ensemble du document API ... Merci ... :) – Codebender