插入TreeSet时出现ClassCastException

时间:2015-01-25 14:30:46

标签: java exception gwt casting

拥有以下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() {}

如何让第一个示例正常工作?

1 个答案:

答案 0 :(得分:4)

当您添加到TreeSet时,您传递的对象必须实施Comparable ,您必须在{{1}时指定Comparator构造。

来自JavaDoc

  

元素按照自然顺序排序,或者按照创建时间提供的TreeSet排序,具体取决于使用的构造函数。

JavaDoc for TreeSet.add(E)甚至会告诉你为什么会这样......

  

ClassCastException - 如果指定的对象无法与此集合中当前的元素进行比较