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