假设:
MyModel.first.as_json
我想写:
@lombok.Data // generates get/set methods for all data members
public class Base {
private int x;
private double y;
private String z;
...
}
public class Derived extends Base {
private int extra;
public String addedMethod() { ... }
}
生成Derived实例,其Base属性值与'baseInstance'相同。
如果符合以下条件,最有效的方法是什么:
我想避免在Derived代码中明确枚举Base的成员,如下所示:
Derived createDerived(Base baseInstance, int extra) { ... }
或者这个:
Derived createDerived(Base b, int extra) {
setX(b.getX());
setY(b.getY());
setZ(b.getZ());
...
this.extra = extra;
}
对Base的任何添加都会破坏Derived类代码。
使用Base的假设复制构造函数
,这样的事情会更好Derived createDerived(Base b, int extra) {
super(b.getX(), b.getY(), b.getY(), ...);
this.extra = extra;
}
生成该复制构造函数的最佳方法是什么?同样,最好避免枚举Base的每个成员。
答案 0 :(得分:3)
如果可以修改Base
,我会添加一个复制构造函数并从Derived
调用它:
class Base {
int field;
Base(int field) {
this.field = field;
}
Base(Base base) {
this(base.field);
}
}
class Derived extends Base {
int extra;
Derived(Base base, int extra) {
super(base);
this.extra = extra;
}
}
如果您无法修改Base
,您仍然可以将实例传递给Derived
,然后通过super
分别复制每个字段:
Derived(Base base, int extra) {
super(base.field, extra);
}