Java 插入到树集中时的ClassCastException

Java 插入到树集中时的ClassCastException,java,exception,gwt,casting,Java,Exception,Gwt,Casting,具有以下Java树集 TreeSet<Widget> tabs = new TreeSet<Widget>(); 它在方法a和b中都可以正常工作,没有任何错误。我想知道为什么在第一个示例中会出现ClassCastException。没有合适的铸件 编辑:这里是方法a、b和小部件类: private void a() { tabs.add(new Widget()); } private void b() { tabs.add(new Widget()

具有以下Java树集

TreeSet<Widget> tabs = new TreeSet<Widget>();
它在方法a和b中都可以正常工作,没有任何错误。我想知道为什么在第一个示例中会出现ClassCastException。没有合适的铸件

编辑:这里是方法a、b和小部件类:

 private void a() {
   tabs.add(new Widget());
 }

 private void b() {
   tabs.add(new Widget());
 }

public class Widget() {}
如何使第一个示例起作用?

当您添加到树集时,您传递的对象必须实现Comparable,或者必须在构建树集时指定Comparator

从:

根据使用的构造函数,可以使用元素的自然顺序或在设置的创建时间提供的比较器对元素进行排序

甚至可以告诉你为什么会这样

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

添加到树集时,传递的对象必须实现Comparable,或者必须在构建树集时指定Comparator

从:

根据使用的构造函数,可以使用元素的自然顺序或在设置的创建时间提供的比较器对元素进行排序

甚至可以告诉你为什么会这样

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


它们都是有效用法。确切的stacktrace是什么?如果您修改了代码,请按原样粘贴代码?它们都是有效用法。确切的stacktrace是什么?如果您修改了代码,请按原样粘贴代码?
 private void a() {
   tabs.add(new Widget());
 }

 private void b() {
   tabs.add(new Widget());
 }

public class Widget() {}