从数据库中获取数据,并映射到两个POJO,我想使用泛型创建具有这两个POJO的相同对象:
public class BaseObj {
String baseVar;
}
public class DerivedObj extends BaseObj {
String derivedVar;
}
// getter setter omitted
我希望使用baseVar
和derivedVar
值来形成相同的对象:
public class MyObject {
String myBaseVar;
String myChildVar;
}
// getter setter omitted
如何创建一个泛型方法,可以采取基类和派生类,并创建MyObject?到目前为止,我已经尝试了:
static <T extends BaseObj> MyObject buildObj(T obj) {
MyObject myObj = new MyObject();
myObj.setMyBaseVar(obj.getBaseVar());
// ⬇⬇⬇ The method getDerivedVar() is undefined for the type T ⬇⬇⬇
myObj.setMyChildVar(obj.getDerivedVar());
// Clearly it can't infer getDerivedVar from base class
return myObj;
}
当从基类构建myObject时,childVal
应该为null,但它应该从子对象获取值。
这是一个简化的版本,MyObject是一个深度嵌套的。这可能吗?因为我的情况是得到db数据映射到POJO,这些数据是相互关联的,还是有其他的方式,我错过了?
沙箱这里
一个丑陋的强制转换方法:
public static <T extends BaseObj> MyObject buildObj(T obj) {
if (obj.getClass().equals(DerivedObj.class)) {
DerivedObj derivedObj = (DerivedObj) obj; // casting to DerivedObj class
return new MyObject(obj.getBaseVar(), derivedObj.getDerivedVar());
}
return new MyObject(obj.getBaseVar(), null);
}