我有两个同一个类的实例:一个在其所有字段中都有值,另一个只有一些字段(其他字段为null)。 我想使用第二个值更新第一个对象的值,只有它不是空值。像这样:
class MyObject {
private void setObject(MyObject other) {
if (other.getField1() != null) this.field1 = other.getField1();
.....
}
}
当我有很多字段时,setObject方法的代码非常长,我需要在所有对象中实现该方法。我想知道是否可以通过更通用的方式完成:将对象作为参数 - >迭代其字段 - >如果isn为null则填充。
我尝试使用一些反射来做到这一点,暂时没有成功。
答案 0 :(得分:2)
我认为你需要这样的东西
class MyObject{
public Integer a;
public Integer b;
public Integer c;
}
public class Reflect {
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
// TODO Auto-generated method stub
MyObject a = new MyObject();
a.a=4;
MyObject b = new MyObject();
b.a=2;
b.b=3;
b.c=5;
GenericInstancePopulateMethod(MyObject.class, a, b);
System.out.println(a.b);//this prints 3 as expected
System.out.println(a.a);//this prints 4 as expected
}
static void GenericInstancePopulateMethod(Class<MyObject> clz, MyObject a, MyObject b) throws IllegalArgumentException, IllegalAccessException{
Field[] fields = clz.getFields();
for(Field f : fields){
if(f.get(a) == null)
f.set(a, f.get(b)) ;//a fields are assigned b fields' values
}
}
}
我使用Field[]
,但如果您使用getter和setter方法,则可以使用Method[]
。