加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么TreeSet抛出ClassCastException

发布时间:2020-12-14 05:09:14 所属栏目:Java 来源:网络整理
导读:在下面的代码中,我试图添加两个员工对象 SetEmployee s = new TreeSetEmployee();s.add(new Employee(1001));s.add(new Employee(1002)); 但结果是java.lang.ClassCastException: Exception in thread "main" java.lang.ClassCastException: Employee canno
在下面的代码中,我试图添加两个员工对象
Set<Employee> s = new TreeSet<Employee>();
s.add(new Employee(1001));
s.add(new Employee(1002));

但结果是java.lang.ClassCastException:

Exception in thread "main" java.lang.ClassCastException: Employee cannot be cast to java.lang.Comparable
    at java.util.TreeMap.put(TreeMap.java:542)
    at java.util.TreeSet.add(TreeSet.java:238)
    at MyClient.main(MyClient.java:9)

但是如果我改变了

Set<Employee> s = new TreeSet<Employee>();
s.add(new Employee(1001));

要么

Set<Employee> s = new HashSet<Employee>();
s.add(new Employee(1001));
s.add(new Employee(1002));

那么结果是成功也不例外.我在上面的代码中没有做任何类的转换活动.请帮我找出原因,并提出我的解决方案.

解决方法

员工必须实施 Comparable,或者在创建 TreeSet时需要 provide a comparator.

SortedSet的文档中详细说明了这一点:

All elements inserted into a sorted set must implement the Comparable interface (or be accepted by the specified comparator). Furthermore,all such elements must be mutually comparable: e1.compareTo(e2) (or comparator.compare(e1,e2)) must not throw a ClassCastException for any elements e1 and e2 in the sorted set. Attempts to violate this restriction will cause the offending method or constructor invocation to throw a ClassCastException.

如果您不符合这些要求,排序集将不知道如何比较其元素,并且无法正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读