如何在java中创建泛型复制构造函数

如何在java中创建泛型复制构造函数,java,Java,请你建议或给一些提示如何做以下。 我让POJO说它叫BankHistoryData。我想将两个表中的数据复制到这个POJO(主表-Bank及其存档-BankArchive)。表中有许多基本相同的字段,因此我不想重复我的内容。 我在谷歌上搜索了一下,找到了一个可以帮助我使用这个Java通用构造函数的工具。 但是,我对泛型有点陌生,不知道具体怎么做。 我想我应该有这样的东西: public class BankHistoryData<T extends Serializable> {

请你建议或给一些提示如何做以下。 我让POJO说它叫BankHistoryData。我想将两个表中的数据复制到这个POJO(主表-Bank及其存档-BankArchive)。表中有许多基本相同的字段,因此我不想重复我的内容。
我在谷歌上搜索了一下,找到了一个可以帮助我使用这个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");
      }
    }
}
公共类银行历史数据{
//我想从对象T设置此字段
私人领域1;
私人领域2;
//还有更多。。。
T a;//要从中复制值的源对象
公共银行历史数据(TA){
这个a=a;
copyData();
} 
//我不太确定……像这样的事情
public void copyData(){
如果(银行的T实例){
this.field1=((Bank)a).getSomeField();
//等等。。。
}else if(银行存档的T实例){
this.field1=((BankArchive)a).getSomeField();
//等等。。。
}否则{
trow新的IllegalArgumentException(“不支持的表”);
}
}
}
欢迎提出任何建议。谢谢

错配

[编辑] 我已经决定不使用泛型,因为我认为@Alex where的2美分用于此。相反,我将在我的业务逻辑服务层中执行此复制逻辑(POJO将保持“愚蠢”)。
不过,我将使这两个hibernate对象实现公共接口(这里只提供共享字段的getter方法)。最后,我将在我的业务逻辑服务层上创建一个复制方法,并使其采用该接口参数来复制字段。
希望这能帮助别人。此外,欢迎发表任何意见。

干杯

T不能保证所需字段的存在

我会改为:

public class BankHistoryData<T extends MySpecificInterfaceOrSuperClass> {}
公共类BankHistoryData{}

您能否创建一个超级接口,例如
IBankData
,并让您的
银行
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();
        }
    }
}
公共类MyClass{
公共void copyData(T实例){
T.getFieldXXX()//这会起作用,因为T扩展了IBankData
if(银行的T实例){
((Bank)T).getBankSpecificField();
}
}
}

顺便说一句——只要我的2美分——在一个设计良好的结构中,你通常不必做
instanceof
,除非是在逻辑门面/分派类中。

我的想法完全正确。但是,我不确定Bank和BankArchive是否可修改。我没有提到Bank和BankArchive是Hibernate对象。所以,我不知道你建议在这个界面中放什么?(getter和setter?)P.s我可以在一定程度上修改它们…@misms是的,在“Bank”和“BankArchive”之间共享的任何常见getter和setter:)我决定不使用泛型,因为我认为这2美分用于此:P我将在我的业务逻辑服务层中执行此复制逻辑(POJO将保持“愚蠢”)。不过,我将使这两个hibernate对象实现公共接口(这里只提供共享字段的getter方法)。最后,我将在我的业务逻辑服务层上创建一个copy方法,并使其接受用于复制字段的接口参数。希望这能帮助别人。此外,欢迎提出任何意见。干杯