关于java:javalangClassCastException-Z-cannot-be-cast-to-XXXXXX

4次阅读

共计 873 个字符,预计需要花费 3 分钟才能阅读完成。

问题形容:
报错 [java.lang.ClassCastException: [Z cannot be cast to [Ljava.lang.ChangeVO in reflective toString on model class]
但代码中在强制转换前可确定要转换对象就是 ChangeVO 对象的实例
代码如下:

public static Map<String, ChangeVO> getAllFieldNotNull(SupplierChangeVO supplierChangeVO) {Map<String, ChangeVO> map = new HashMap<>();
 if (supplierChangeVO == null) {return map;}
    try {Field[] fields = supplierChangeVO.getClass().getDeclaredFields();
 for (Field field : fields) {field.setAccessible(true);
 ChangeVO changeobj = (ChangeVO)field.get(supplierChangeVO);
 if (changeobj != null) {map.put(field.getName(), changeobj);
 }
        }
    } catch (Exception e) {log.error("getAllFieldNotNull err {}", e);
 }
    return map;
}

问题剖析:
在反射获取对象的 field 属性列表后,没有对 field 的属性类型做判断就进行强制类型转换。因而报错
问题解决:

在转换前,先对要转化属性的类型进行判断,是须要的类型再进行转换
Object changeobj = field.get(supplierChangeVO);
if (changeobj != null && changeobj instanceof ChangeVO) {map.put(field.getName(), (ChangeVO) changeobj);
}

另外:
在对反射后获取的对象属性进行解决前须要先设置 setAccessible 属性

正文完
 0