有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

对象在java中构造一类对象

有一个超类,a,还有很多子类,B,C,D。。。人们可以编写更多的子类。每个类都有dostuff()方法,每个方法在某些方面都不同

我想要一个对象,它可以构造属于一个或其任何子类的任何对象

例如,我可以传递子类的名称或该类的一个对象,它将构造该类的另一个对象

我当然会写

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) 个答案

  1. # 1 楼答案

    你可以使用反射

    public static <T extends A> T construct(Class<T> tClass) {
        T t = tClass.newInstance();
        t.doStuff();
        moreStuff();
        return t;
    }
    

    您可能需要强制转换并捕获异常,但这是基本思想

  2. # 2 楼答案

    你应该实现工厂模式。您的实现将使用Class.forName(className)

    public A create(String className) throws Exception {
        return Class.forName(className).newInstance();
    }