【问题标题】:How can the Sub2 copy constructor automatically copy new member variables from Sub1?Sub2 复制构造函数如何自动从 Sub1 复制新的成员变量?
【发布时间】:2011-08-13 03:35:53
【问题描述】:

Sub2的目的是及时保存Sub1属性的快照。

例如:

subService.update(sub1);
Sub2 sub2 = new Sub2(sub1);
subService.save(sub2);  

以下实现的问题在于每当向 Sub1 添加新成员变量时,程序员必须记住更改 Sub2 中的复制构造函数以将新成员从 Sub1 复制到 Sub2

Sub2复制构造函数如何自动从Sub1复制新的成员变量?

Sub1 & Sub2 的基类:

public class Base{

    protected String a;
    protected String b;
    protected String c;
    // ...
    protected String z;

}

子 1:

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;

    }

}

子 2:

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();         

    }


}

【问题讨论】:

  • 你能在 Java 中为类添加新的成员变量吗?我不知道。
  • 不是动态的。我相信他的意思是当班级被修改时。

标签: java oop inheritance


【解决方案1】:

Java 没有像 C++ 那样的复制构造函数的特殊概念,所以它只是另一个带参数的构造函数。如果不使用反射,您无法知道类在运行时具有哪些成员,但是我建议让 Sub1 负责存储其当前状态。例如,将 store 方法添加到 Sub1,这将返回一个字符串数组(其成员)。然后 Sub2 可以将这些数组存储在某个地方。当您向 Sub1 添加新成员时,还要更改 Sub1 的存储方法。这样您就不必触摸 Sub1。

【讨论】:

    【解决方案2】:

    在 Sub1 上实现“public Sub1 copy()”方法(或实现 Cloneable)。当您需要 Sub1 实例的快照时,只需调用 copy() 或 clone()。摆脱 Base/Sub2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-05
      • 2011-08-07
      • 1970-01-01
      • 2015-05-29
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多