如何在java中使用泛型从基类和派生类构建相同的类



从数据库中获取数据,并映射到两个POJO,我想使用泛型创建具有这两个POJO的相同对象:

public class BaseObj {
String baseVar;
}
public class DerivedObj extends BaseObj {
String derivedVar;
}
// getter setter omitted

我希望使用baseVarderivedVar值来形成相同的对象:

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);
}

最新更新