簡體   English   中英

如何在java中執行泛型復制構造函數

[英]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 ,讓您的BankBankArchive都實現該接口並傳入接口?

如果你真的有一些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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM