插入 TreeSet 时出现 ClassCastException
ClassCastException when inserting into a TreeSet
具有以下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 和小部件 class:
private void a() {
tabs.add(new Widget());
}
private void b() {
tabs.add(new Widget());
}
public class Widget() {}
如何使第一个示例起作用?
当您添加到 TreeSet
时,您传递的对象必须实现 Comparable
或 您必须在构建 TreeSet
的时间。
来自JavaDoc:
The elements are ordered using their natural ordering, or by a Comparator
provided at set creation time, depending on which constructor is used.
JavaDoc for TreeSet.add(E)
甚至告诉你为什么会这样...
ClassCastException - if the specified object cannot be compared with the elements currently in this set
具有以下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 和小部件 class:
private void a() {
tabs.add(new Widget());
}
private void b() {
tabs.add(new Widget());
}
public class Widget() {}
如何使第一个示例起作用?
当您添加到 TreeSet
时,您传递的对象必须实现 Comparable
或 您必须在构建 TreeSet
的时间。
来自JavaDoc:
The elements are ordered using their natural ordering, or by a
Comparator
provided at set creation time, depending on which constructor is used.
JavaDoc for TreeSet.add(E)
甚至告诉你为什么会这样...
ClassCastException - if the specified object cannot be compared with the elements currently in this set