【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);
    }
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页
评论

打赏作者

シ風箏

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值