我正在与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