您可以做的是使用 Java Reflect API。这提供了最简单的实现,但可能不如其他解决方案快。
您基本上要做的就是将所有数据从 Model 传递到 ExtendedModel,并让 ExtendedModel 当然扩展 Model。
我的“模型”课:
public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
Model model = new Model(1);
ExtendedModel extended = model.get(ExtendedModel.class);
extended.setA2("Hello World");
System.out.println(extended.getA1());
System.out.println(extended.getA2());
}
private int a1;
public Model() {}
public Model(int a1) {
this.a1 = a1;
}
public void setA1(int a1) {
this.a1 = a1;
}
public int getA1() {
return this.a1;
}
/**
* This method will transform the current object into an ExtendedModel.
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public <T> T get(Class<? extends T> classType) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
T object = classType.getConstructor().newInstance();
// pass all the data via setters
for (Field field : this.getClass().getDeclaredFields()) {
String methodName = "set"+StringUtil.ucfirst(field.getName()); // uppercase first!
classType.getMethod(methodName, field.getType()).invoke(object, field.get(this));
}
// return object
return object;
}
我的“扩展模型”课程:
public class ExtendedModel extends Model {
private String a2;
public ExtendedModel() {}
public String getA2() {
return this.a2;
}
public void setA2(String a2) {
this.a2 = a2;
}
}
当然,您也可以使用 getter 而不是直接访问属性。这将帮助您轻松地将解决方案与其他类/对象一起使用。唯一重要的是:
- 声明一个默认构造函数(没有或一组已知数量的参数)。
- 将所有数据从“Model”复制到“ExtendedModel”或您想要扩展的任何类。