【Java报错】java.lang.ClassCastException: xxxClass cannot be cast to java.lang.Comparable 问题重现+解决

简介: 【Java报错】java.lang.ClassCastException: xxxClass cannot be cast to java.lang.Comparable 问题重现+解决

报错信息:java.lang.ClassCastException: xxx cannot be cast to java.lang.Comparable

1. 问题重现

以下为伪代码:

// 获取的List对象集合
  List<SomeRes> someResList = service.getSomeResList();
  // 要放入的Set集合
  Set<SomeRes> someResSet = null;
  for (SomeRes res : someResList ) {
    someResSet = new TreeSet<>();
    someResSet.add(res);
  }

原因分析:

第一次添加元素时,因为TreeSet或者TreeMap对象为空,不需要比较,不会报错。但是当第二次放入元素时,TreeSet或者TreeMap为了确保对象有序的就必须比较,这个时候发现这两个对象根本无法比较,则抛出该异常错误。实际上在new TreeSet<>(); 时idea已经提示(Construction of sorted collection with non-comparable elements 构造具有非可比元素的排序集合)

2. 问题解决

非可排序的类实现 Comparable 接口,并重写 compareTo 方法:

public class SomeRes implements Comparable<SomeRes> {
    @ApiModelProperty(value = "设备ID")
    @JsonProperty(value = "equip")
    private String equip;
    @ApiModelProperty(value = "车牌号")
    @JsonProperty(value = "car_number")
    private String carNumber;
    @Override
    public int compareTo(@NotNull SomeRes o) {
        return this.carNumber.compareTo(o.carNumber);
    }
}
目录
相关文章
|
2月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
97 4
|
23天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
28天前
|
安全 小程序 Java
Java“AccessControlException”报错解决
Java中的“AccessControlException”通常发生在尝试访问受安全策略限制的资源时。解决方法包括:1. 检查安全策略文件(java.policy)配置;2. 确保代码具有足够的权限;3. 调整JVM启动参数以放宽安全限制。
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
45 5
|
2月前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
38 3
|
2月前
|
缓存 Java Linux
java操作hbase报错:KeeperErrorCode=NoNode for /hbase-unsecure/master
java操作hbase报错:KeeperErrorCode=NoNode for /hbase-unsecure/master
148 2
|
2月前
|
Java
java服务调用报错503
java服务调用报错503
36 2
|
2月前
|
JSON Java 数据格式
java调用服务报错400
java调用服务报错400
64 2
|
2月前
|
JSON Java 数据格式
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
91 1
|
2月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
下一篇
无影云桌面