Sub2的目的是在Sub1的属性中保存快照。
e.g:
subService.update(sub1);
Sub2 sub2 = new Sub2(sub1);
subService.save(sub2);
以下实现的问题是每当将新成员变量添加到Sub1时,程序员必须记住更改Sub2中的复制构造函数以将新成员从Sub1复制到Sub2 。 / p>
Sub2拷贝构造函数如何自动从Sub1复制新成员变量?
public class Base{
protected String a;
protected String b;
protected String c;
// ...
protected String z;
}
public class Sub1 extends Base {
public Sub1(
String a,
String b,
String c,
// ...
String z){
this.a = a;
this.b = b;
this.c = c;
// ...
this.z = z;
}
}
public class Sub2 extends Base {
public Sub2(Sub1 s1){
this.a = s1.getA();
this.b = s1.getB();
this.c = s1.getC();
// ...
this.z = s1.getZ();
}
}
答案 0 :(得分:0)
Java对C ++这样的复制构造函数没有特殊的概念,所以它只是另一个带参数的构造函数。如果不使用反射,您无法知道类在运行时具有哪些成员,但是我建议让Sub1负责存储其当前状态。例如,将存储方法添加到Sub1,它将返回一个字符串数组(其成员)。然后Sub2可以将这些数组存储在某个地方。向Sub1添加新成员时,还要更改Sub1的存储方法。这样您就不必触摸Sub1。
答案 1 :(得分:0)
在Sub1上实现“public Sub1 copy()”方法(或实现Cloneable)。当您需要Sub1实例的快照时,只需调用copy()或clone()。摆脱Base / Sub2。