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

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 );
}

 

posted @ 2018-08-06 18:06  BBJB  阅读(346)  评论(0编辑  收藏  举报