object在java中构造一个对象类

时间:2011-01-09 08:31:56

标签: java

有一个超类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()。

在这种情况下我该怎么做?

2 个答案:

答案 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();
}