所以我试图创建一个使用扩展抽象类的泛型的类。 实施例
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( ... ));
答案 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;
}
}