2012-06-03 15 views
1

所以我试图创建一个类,它使用扩展抽象类的泛型。例如,是否可以通过将“new Object()”作为泛型类来实例化泛型类?

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对象的方法或构造函数。

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

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

请注意,这是由于Java字节码中泛型的性质。在.NET中,您可以使用反射来访问这些信息。 – dtech

+0

不应该是'Class '? – Jeffrey

+0

@Jeffrey:它可能是,但是仿制药没有关于它们被实例化的论点的概念...... –