java 复制字段_java - 在构造函数中按字段复制字段 - 我需要一个更简洁的形式 - SO中文参考 - www.soinside.com...
你能做的是:
public MyClassExtension(MyClass instance) {
super(...);
new_field = some_value;
}
在創建子類時,最好調用超級構造函數(否則默認情況下將調用默認的超級構造函數)。
為什么這樣?因為它限制了重新定義相同初始化所需的次數。例如,當您想要創建具有默認值的對象時。您只在母類中執行一次,并在創建子類時默認調用默認的超級構造函數。您還可以覆蓋子類中的默認值,具體取決于您定義類的方式。
這是一個例子:假設你有像這樣定義的MyClass:
class MyClass {
protected Object field1;
protected Object field2;
protected Object field3;
public MyClass(MyClass c) {
field1 = c.field1; // Remark: this is only the setup of
field2 = c.field2; // the reference. If you want to create a
field3 = c.field3; // copy, please do so with a constructor.
}
public MyClass(Object field1, Object field2, object field3) {
this.field1 = field1; // Same remark here
this.field2 = field2; // (about references).
this.field3 = field3;
}
}
你在這里看到MyClass定義了2個構造函數:一個所謂的復制構造函數,它將MyClass對象作為參數,構造函數包含所有需要的字段。
然后,當您想要創建一個以MyClass對象作為參數的子類時,您可以這樣做:
class MyClassExtension extends MyClass {
private Object newField;
public MyClassExtension(MyClass c, Object newField) {
super(c);
this.newField = newField;
}
}
但你也可以這樣做:
class MyClassExtension {
private Object newField;
public MyClassExtension(MyClass c, Object newField) {
super(c.field1, c.field2, c.field3);
this.newField = newField;
}
}
因此,您限制了對MyClass對象參數的訪問次數,并且子類MyClassExtension構造函數是簡潔的。
請注意,您必須在程序中的某個位置或其他位置提供此代碼。您必須為您的編譯器定義如何在給定MyClassExtension對象的情況下構建MyClass。要么代碼在MyClass,要么在MyClass和MyClassExtension。我只是提供了一種減少代碼庫的方法,并且如果要更改代碼中的任何內容,則限制所需的更改次數。使用此解決方案,如果您更改MyClass構造函數,MyClassExtension也將受到影響(除非您強制執行其他操作)。
另請注意,您需要自己定義復制構造函數,否則編譯器將無法知道您是要進行深層復制還是僅僅引用復制。更多信息,請訪問http://blog.amitinside.com/Copy-Constructor-in-Java/
總結
以上是生活随笔為你收集整理的java 复制字段_java - 在构造函数中按字段复制字段 - 我需要一个更简洁的形式 - SO中文参考 - www.soinside.com...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLite 日期 时间
- 下一篇: 事件处理 v-on