反射操作数组---反序列化小知识
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 ); }