Cod*_*der 3 java generics treeset
我正在使用TreeSet并找到了一个ClassCastExceptionwhile调用TreeSet#add()方法.
码:
public class Testing {
public static void main(String[] args) {
TreeSet<Testing> ts = new TreeSet<>();
ts.add(new Testing());
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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)
Run Code Online (Sandbox Code Playgroud)
显然,这是因为它TreeSet是一个有序的集合,它需要Comparable对象来订购它们,所以为什么不将它的类型声明为
public class TreeSet<E extends Comparable<E>>
Run Code Online (Sandbox Code Playgroud)
并在编译期间进行检查而不是在运行时抛出异常?
一个TreeSet元素不必实现Comparable,因为你可以传递Comparator给一个TreeSet构造函数,以便为不实现的元素强加一个排序Comparable(或者Comparable当你想要使用其他元素时实现的元素的排序)比自然定义的Comparable).
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |