您能告诉或提供一些提示如何做以下事项。 我有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将保持&#34;愚蠢&#34;)。 虽然,我将使这两个hibernate对象实现通用接口(只有共享字段的getter方法将在这里)。最后,我将在我的业务逻辑服务层上创建一个复制方法,并使其采用该接口参数来复制字段 希望这会对某人有所帮助。此外,欢迎任何评论 干杯!
答案 0 :(得分:1)
T不能保证,正如所写,必须存在必填字段。
我会将其更改为:
public class BankHistoryData<T extends MySpecificInterfaceOrSuperClass> {}
答案 1 :(得分:1)
你能创建一个超级界面,例如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
。