2009-09-23 78 views
1

我有這樣一個類:如何訪問集合泛型類型類

public class SubClass <T> extends SuperClass<Collection<T>>{ 
    public Class<T> getInner() { 
     // What goes here? 
    } 
} 

如果超類是一個簡單的泛型類。我的問題是如何訪問一個Class對象以返回它?由於Type擦除,我似乎無法做到這一點。

任何幫助?

+1

如果您可以詳細瞭解您正在嘗試執行的具體操作,這將有所幫助,因爲您的方法可能有缺陷。 – 2009-09-23 16:46:11

+0

這個虛擬類反映了我的作品中很難描述的一個類。我相信我需要做的事情無法完成,因爲我沒有參數構造函數的限制。再加上我剛剛注意到我這門課的設計存在缺陷。我想要超類的所有子類都不能是通用的,這是。我將用它作爲特例。問題'解決' – 2009-09-23 16:56:10

回答

4

準確地說,類型擦除意味着您必須明確地執行此操作。

基本上你需要​​在構造函數中使用Class<T>作爲參數,然後掛在它上面。儘管如此,如果T實際上應該是(比如說)List<String>,您仍然可以在那裏找到類型擦除問題。有關此方法的更多信息,請參閱Neal Gafter's blog,解決方法請參見Guice 2.0 TypeLiteral class

+0

嗯,我害怕這將是唯一的選擇......我需要這個類沒有參數的構造因爲它是超類的許多子類之一,創建使用反射與無參數調用newInstanse方法。所以我可以用來繞過這個限制絕對沒有任何竅門?任何醜陋的黑客都會幫助:) – 2009-09-23 16:43:46

+0

不。這些信息在執行時不存在。 – 2009-09-23 16:45:19

+0

更新爲您的答案:我只會將非泛型類傳遞給集合,這樣添加的類型擦除問題不會彈出。 – 2009-09-23 16:46:20