场景如下:
有一个类A,它有50个属性!我需要对每个属性进行赋值操作……手动进行的话,代码是在太冗长了。
反射实现:
// 老的A,假设里面有值
A aOld;
// 新的对象,要将老的A中存在的值更新进来
A a = new A();
Class clazz = A.class;
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields){
//保证可以对a进行修改
field.setAccessible(true);
//get(col)是获取第col个属性的操作
if (getOldValue(field, aOld)== null) {
continue;
}
field.set(a, getOldValue(field, aOld));
}
private Object getOldValue(Field field, Object obj) {
try {
return field.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
注意要用 getDeclaredFields() 这个方法,getDeclaredFields()返回Class中所有的字段,包括私有字段,而getFields()只返回公有字段,即有public修饰的字段。