[英]Java: How to construct derived class instance given base instance?
鑒於:
@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 createDerived(Base baseInstance, int extra) { ... }
產生Derived實例,該實例具有與'baseInstance'相同的Base屬性值。
在以下情況下,最有效的方法是什么?
我想避免像這樣在派生代碼中顯式枚舉Base的成員:
Derived createDerived(Base b, int extra) {
setX(b.getX());
setY(b.getY());
setZ(b.getZ());
...
this.extra = extra;
}
或這個:
Derived createDerived(Base b, int extra) {
super(b.getX(), b.getY(), b.getY(), ...);
this.extra = extra;
}
然后,對Base的任何添加都會破壞Derived類代碼。
對於Base使用一個假設的副本構造函數,這樣的事情將是更好的選擇:
Derived createDerived(Base b, int extra) {
super(b);
this.extra = extra;
}
生成該副本構造函數的最佳方法是什么? 同樣,最好避免枚舉Base的每個成員。
如果可以修改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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.