我似乎把自己塗在了一個泛型的角落裏。基本上我有一個通用接口X<T1, T2 extends Y<?, ?>>
與一堆方法,包括T1 getFirstClass()
和T2 getSecondClass()
。這對大多數事情都很好,但我需要做的一件事是找到這個類的實例,它們是我正在查找的超類,並且我需要一個「全部捕獲」對象找不到。這意味着我最終看起來像一個類:有什麼方法可以創建/獲取並返回一個類<T<?, ?>>對象?
public class A implements X<Object, Y<?, ?>> {
...
public Class<Y<?, ?>> getSecondClass() {
return ????
}
}
我試着用這個對付無視<?, ?>
位和使用@SuppressWarnings("rawtypes")
,它在Eclipse的作品,但是當螞蟻建造,提供錯誤消息type parameter Y is not within its bound
。 JDK 應該是相同的 - 我只知道我的系統上安裝了一個,即1.6.0_23(由於超出我的控制範圍的因素,我不幸無法更新)。
有沒有什麼辦法可以解決這個問題還是我將不得不回到繪圖板和重新設計我的課?
這對我來說似乎是一個非常複雜的設計。另外我不認爲你可以在類或方法聲明中使用通配符。在Java 7中改變了嗎? – 2012-02-24 09:41:54
關於您的主要問題,由於類型擦除,您不能在運行時返回所需的泛型類。然而,你可以通過在構造函數中傳遞一個令牌類型來解決某些問題。 – 2012-02-24 09:46:20
我知道類型擦除,我不在乎。泛型只在編譯時纔有類型安全性,並且可以爲我節省數十個演員,同時減少出錯的可能性。你是什麼意思在構造函數中傳遞一個標記類型?哦,史密斯先生 - 你絕對可以在類和方法聲明中使用通配符,它可以在同一個項目中的其他類的負載中正常工作。 – Thor84no 2012-02-24 10:12:29