拥有以下Java TreeSet
TreeSet<Widget> tabs = new TreeSet<Widget>();
当我在方法a()中tabs.add(new Widget());
时它起作用了。当我在执行第一次插入后不久在方法b()中执行相同操作时,我发生了ClassCastException。
更改
ArrayList<Widget> tabs = new ArrayList<Widget>();
它在方法a()和b()中都能正常工作,没有任何错误。我想知道为什么在第一个例子中有一个ClassCastException。没有铸造。
编辑:这是方法a,b和Widget类:
private void a() {
tabs.add(new Widget());
}
private void b() {
tabs.add(new Widget());
}
public class Widget() {}
如何让第一个示例正常工作?
答案 0 :(得分:4)
当您添加到TreeSet
时,您传递的对象必须实施Comparable
或,您必须在{{1}时指定Comparator
构造。
来自JavaDoc:
元素按照自然顺序排序,或者按照创建时间提供的
TreeSet
排序,具体取决于使用的构造函数。
JavaDoc for TreeSet.add(E)
甚至会告诉你为什么会这样......
ClassCastException - 如果指定的对象无法与此集合中当前的元素进行比较