java.lang.ClassCastException

文章讲述了在代码迁移过程中,由于接口返回类型与接收对象不匹配引发的ClassCastException。问题在于BeanUtils.copyProperties时泛型被擦除,导致对象类型错误。作者通过序列化和反序列化解决了这个问题。
摘要由CSDN通过智能技术生成

ClassCastException 是运行时异常,常见的异常原因是:

1.强转

2.包路径有问题

前因:

由于做代码迁移,有些部分的代码没有迁移完,接口返回的是 MaintenanceLogWorkOrderDetailVO,但是返回前端的对象是 NewbieRepairTicketConfirmVO,于是用了 BeanUtils.copyProperties,之后又对数据做了处理,于是就在遍历 HandRepairProject 对象时报了 ClassCastException 异常。

public class MaintenanceLogWorkOrderDetailVO{
    private List<A> HandRepairProject;

    public static class A{
        private String name;
    }
}

public class NewbieRepairTicketConfirmVO{
    private List<B> HandRepairProject;

    public static class B{
        private String name;
    }
}

经排查问题原因是由于 BeanCopy 给list复制的时候泛型擦除了,导致 NewbieRepairTicketConfirmVO 中存的不是 B 对象,而是A 对象。改成通过序列化再反序列化解决了。

NewbieRepairTicketConfirmVO bffPO = JSONObject.parseObject(JSONObject.toJSONString(soucheResult)
,NewbieRepairTicketConfirmVO.class);

 泛型擦除

泛型的实现是在编译层,编译完成后的字节码是没有泛型的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值