我正在與TreeSet
一起工作,發現ClassCastException
,同時調用TreeSet#add()
方法。爲什麼TreeSet聲明TreeSet <E>而不是TreeSet <E extends Comparable <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