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);
泛型擦除
泛型的实现是在编译层,编译完成后的字节码是没有泛型的