从Java中的另一个类静态地实例化通用父级的子类

时间:2019-07-07 22:11:13

标签: java oop generics

我有一个通用类,如下所示:

public abstract class Foo<T extends Foo<T>> {...

和另一个类似的类:

public abstract class Fum<T extends Fum<T,U>, U extends Foo<U>> {...

最后是一些看起来像的子类:

public class SubFoo extends Foo<SubFoo> {...

public class SubFum extends Fum<SubFum,SubFoo> {...

在抽象类中,有声明为public abstract T create();(具有重载版本)的抽象方法,这些方法负责实例化超类的方法中使用的子类对象。

但是,我显然不能简单地在new U()中编写Fum来获取SubFoo的实例,因此我想要一些可以覆盖的静态占位符方法。但是,由于任何我无法理解的原因,我显然不能写public static abstract T create();

因此,我在Fum中写了一个看起来像这样的方法:

@SuppressWarnings("unchecked")
protected static <V extends Foo<V>> V newSubFoo() {
    try {//create() requires a constructed object to work.
        return (V) Foo.class.asSubclass(Foo.class).newInstance().create();
    } catch (InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
        System.exit(1);
        return null;
    }//I don't expect this to work, but I don't know what to use before 
}   // the "asSubclass" call.

设法使编译器关闭。但是,这似乎并没有带我到任何地方。

结论:是否有某种方法可以使用可以在U中重写的静态方法在Fum中构造类型为SubFoo的新对象(最好不编写空白构造函数)在Foo中?

0 个答案:

没有答案