1

所以我试图创建一个使用泛型扩展抽象类的类。前任。

public abstract class Template<C extends Abstract>

但是,我需要在我的班级中实例化这个“C”。我想我也许可以这样做:

C s = (C) ((C)new Object()).getClass().getConstructor(Known.class,AnotherKnown.class).newInstance(objectOfKnownType,objectOfAnotherKnownType);

所以我的问题基本上是这是否可能。我觉得像

((C) new Object()).getClass()

可能会给我一些问题。

如果我将其更改为:

C a;
C s = (C) (a.getClass().getConstructor( ... ).newInstance( ... ));
4

1 回答 1

5
(C) new Object()

无效,可能会在ClassCastException稍后给您,因为 anObject不是C.

泛型的实现方式意味着Template不知道C它是用什么来实例化的,你必须创建一个接受Class对象的方法或构造函数。

public abstract class Template<C extends Abstract>
{
    private Class<C> classOfC;

    public Template( Class<C> clazz ) {
        classOfC = clazz;
    }
}
于 2012-06-03T23:29:10.207 回答