我有這樣一個類:如何訪問集合泛型類型類
public class SubClass <T> extends SuperClass<Collection<T>>{
public Class<T> getInner() {
// What goes here?
}
}
如果超類是一個簡單的泛型類。我的問題是如何訪問一個Class對象以返回它?由於Type擦除,我似乎無法做到這一點。
任何幫助?
我有這樣一個類:如何訪問集合泛型類型類
public class SubClass <T> extends SuperClass<Collection<T>>{
public Class<T> getInner() {
// What goes here?
}
}
如果超類是一個簡單的泛型類。我的問題是如何訪問一個Class對象以返回它?由於Type擦除,我似乎無法做到這一點。
任何幫助?
準確地說,類型擦除意味着您必須明確地執行此操作。
基本上你需要在構造函數中使用Class<T>
作爲參數,然後掛在它上面。儘管如此,如果T
實際上應該是(比如說)List<String>
,您仍然可以在那裏找到類型擦除問題。有關此方法的更多信息,請參閱Neal Gafter's blog,解決方法請參見Guice 2.0 TypeLiteral
class。
嗯,我害怕這將是唯一的選擇......我需要這個類沒有參數的構造因爲它是超類的許多子類之一,創建使用反射與無參數調用newInstanse方法。所以我可以用來繞過這個限制絕對沒有任何竅門?任何醜陋的黑客都會幫助:) – 2009-09-23 16:43:46
不。這些信息在執行時不存在。 – 2009-09-23 16:45:19
更新爲您的答案:我只會將非泛型類傳遞給集合
如果您可以詳細瞭解您正在嘗試執行的具體操作,這將有所幫助,因爲您的方法可能有缺陷。 – 2009-09-23 16:46:11
這個虛擬類反映了我的作品中很難描述的一個類。我相信我需要做的事情無法完成,因爲我沒有參數構造函數的限制。再加上我剛剛注意到我這門課的設計存在缺陷。我想要超類的所有子類都不能是通用的,這是。我將用它作爲特例。問題'解決' – 2009-09-23 16:56:10