反射操作数组---反序列化小知识

Object[]  为 数据源

model 中有一个属性为xxx[] 未知,在java中,object[] 无法强制转化成xxx[],如果上文中的f.set(obj,fieldObj );方法反射写入值,会报错。

具体方法:

//obj为对象
//classKey 为数组的那个成员变量名称
java.lang.reflect.Field f = obj.getClass().getDeclaredField(classKey);

//获得数组类型
Class fieldClazz = f.getType();

if (fieldClazz.isArray()) {
    Object[] arrayObjs = (Object[]) value;//反序列化生产的object[]
    
    //fieldClazz.getComponentType();获得数组的成员类型
    //Array.newInstance(clazz,length) 相当于 Clazz[] array = new Clazz[length]; 但是clazz 未知时候,无法用后者
    Object fieldObj = Array.newInstance(fieldClazz.getComponentType(), arrayObjs.length);
    
    for(int j = 0 ; j < arrayObjs.length; j++) {
        //写入值的方法
        Array.set(fieldObj, j, arrayObjs[j]);
    }
     f.set(obj,fieldObj );
}

猜你喜欢

转载自www.cnblogs.com/ggwow/p/9431750.html