[英]How to do generic copy constructor in java
你可以建議或提供一些提示如何做以下。 我有POJO讓我們說它叫做BankHistoryData。 我想將兩個表中的數據復制到此POJO(主表 - 銀行及其存檔 - BankArchive)。 表有很多基本相同的字段,所以我不想重復我的自我。
我用Google搜索並找到了一個可以幫助我解決這個問題的工具 - Java通用構造函數。 但是,我對泛型有點新意,不確定如何做到這一點。
我想我應該有這樣的事情:
public class BankHistoryData<T extends Serializable> {
// I would like to set this fields from the object T
private field1;
private field2;
// and many more ...
T a; // source object from which to copy values
public BankHistoryData(T a) {
this.a = a;
copyData();
}
// NOT SURE ABOUT THIS ... something like this
public void copyData() {
if(T instanceof Bank) {
this.field1 = ((Bank)a).getSomeField();
// and so on ...
} else if (T instanceof BankArchive) {
this.field1 = ((BankArchive)a).getSomeField();
// and so on ...
} else {
trow new IllegalArgumentException("Not supported table");
}
}
}
歡迎任何建議。 謝謝!
mismas
[編輯]我決定不使用泛型,因為我認為來自@Alex的那些2美分就是為了那個。 相反,我將在我的業務邏輯服務層中執行此復制邏輯(POJO將保持“愚蠢”)。
雖然,我將使這兩個hibernate對象實現通用接口(只有共享字段的getter方法將在這里)。 最后,我將在我的業務邏輯服務層上創建一個復制方法,並使其采用該接口參數來復制字段。
希望這會對某人有所幫助。 此外,歡迎任何評論。
干杯!
正如所寫,T不能保證所需的字段存在。
我會把它改成:
public class BankHistoryData<T extends MySpecificInterfaceOrSuperClass> {}
您是否可以創建一個超級接口,例如IBankData
,讓您的Bank
和BankArchive
都實現該接口並傳入接口?
如果你真的有一些Bank / BankArchive的特定邏輯,你可以做到
public class MyClass<T extends IBankData> {
public void copyData(T instance) {
T.getFieldXXX() // this would work because T extends IBankData
if (T instanceof Bank) {
((Bank) T).getBankSpecificField();
}
}
}
BTW - 只需2美分 - 在設計良好的結構中,除非在邏輯外觀/調度類中,否則通常不需要執行instanceof
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.