java.lang.ClassCastException: [Z cannot be cast to [XXX.XXX
Posted 一片秋叶一树春
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.ClassCastException: [Z cannot be cast to [XXX.XXX相关的知识,希望对你有一定的参考价值。
问题描述:
报错 [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属性
以上是关于java.lang.ClassCastException: [Z cannot be cast to [XXX.XXX的主要内容,如果未能解决你的问题,请参考以下文章