2012-06-03 16 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:它可能是,但是仿製藥沒有關於它們被實例化的論點的概念...... –