有一个超类A,并且有许多子类,B,C,D ......人们可以编写更多的子类。每个类都有方法dostuff(),每个方法都有所不同。
我想要一个构造任何属于A或其任何子类的对象的对象。
例如,我可以传递子类的名称或该类的对象,它将构造该类的另一个对象。
当然我可以写
A construct(A var){
stuff = var.dostuff();
domorestuff(stuff)
return new A(stuff);
}
B construct(B var){
stuff = var.dostuff();
domorestuff(stuff)
return new B(stuff);
}
C construct(C var){
stuff = var.dostuff();
domorestuff(stuff)
return new C(stuff);
}
但效率不高。每次我创建一个新的子类时,我都要编写一些新行。
似乎我也不能使用泛型。因为我不能在不在A的任何子类中的对象上使用dostuff()。
在这种情况下我该怎么做?
答案 0 :(得分:1)
您可以使用反射。
public static <T extends A> T construct(Class<T> tClass) {
T t = tClass.newInstance();
t.doStuff();
moreStuff();
return t;
}
您可能需要投射和捕捉异常,但这是基本想法。
答案 1 :(得分:1)
您应该实施工厂模式。您的实施将使用Class.forName(className)
。
public A create(String className) throws Exception {
return Class.forName(className).newInstance();
}