假设我有A级
public class A {
private int field1;
private String field2;
...
}
我创建了一个新的A实例,然后是第二个实例:
A a1 = new A();
A a2 = new A();
是否有任何简单的方法(反思等)将字段从a2
复制到a1
,而无需将实例a2
分配给a1
(我不想更改实例a1
的引用,只有其字段的值)?我知道我可以用某种方法手动完成它,但是如果有很多字段,它有点不实用。
我在想是否有某种方式可以反思?
任何人都有一些经验吗?
答案 0 :(得分:4)
答案 1 :(得分:1)
您需要考虑许多事项,并根据要求采取多种方法。使用反射你可以做这样的事情
A a1 //the original a
A a2 = new A(); //the "duplicate"
Field[] fields = A.class.getDeclaredFields();
for (Field f : fields){
f.setAccessible(true); //need that if the fields are not
//accesible i.e private fields
f.get(a1);
f.set(a2, f.get(a1));
}
请注意,a2 不是a1的深层副本 ,但它已经分配了相同的a1引用。这意味着如果您的A类具有类似B的对象字段
class A {
B b;
}
class B {
public String myString;
}
然后在创建了一个dublicate a2后,更改b对象的myString将反映到a1和a2。这是因为a1和a2都引用了同一个B实例。