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的主要内容,如果未能解决你的问题,请参考以下文章