Я работал с TreeSet
и нашел ClassCastException
при вызове метода TreeSet#add()
.Почему TreeSet объявлен TreeSet <E> вместо TreeSet <E расширяет Сопоставимые <E>>
Код:
public class Testing {
public static void main(String[] args) {
TreeSet<Testing> ts = new TreeSet<>();
ts.add(new Testing());
}
}
Выход:
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)
Очевидно, это потому, что TreeSet
является упорядоченная коллекция и нуждается Comparable
объекты для заказа их, так почему бы не заявить о своей типа
public class TreeSet<E extends Comparable<E>>
и выполнять проверку во время компиляции вместо исключения исключения во время выполнения?
Я думаю, я спросил слишком быстро, не пройдя весь документ API ... Спасибо ... :) – Codebender