是否可以通过将“new Object()”作为泛型类来实例化泛型类?

时间:2012-06-03 23:26:40

标签: java generics object casting instantiation

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

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( ... ));

1 个答案:

答案 0 :(得分:5)

(C) new Object()

无效,之后可能会ClassCastException,因为Object不是C

The way generics are implemented表示Template将不知道实例化的C,您必须创建一个带有Class对象的方法或构造函数。 / p>

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

    public Template( Class<C> clazz ) {
        classOfC = clazz;
    }
}