2
我有一個看起來像這樣的方法:傳遞一個運行時解析參數,其中有多個綁定類型的方法,編譯錯誤
public static <T extends Enum<T> & Marshallable> String foo(Collection<T> collection, Class<? extends Marshallable>... marshallables);
所以我期待被傳爲實現Marshallable接口枚舉集。 它工作正常,如果我在運行時具體的枚舉類型,但我寫了一個測試方法,從類對象動態地創建一個枚舉列表(實現Marshallable),我無法將此列表傳遞給上面的方法。
@Test
public void fooTest() {
...
if (clazz.isEnum()) { // collection enum xml
List<? extends Enum<? extends Marshallable>> enumList = (List<? extends Enum<? extends Marshallable>>) Arrays.asList(clazz.getEnumConstants());
--> String enumListXml = foo(enumList, clazz);
...
標記行會給出編譯錯誤。我無法弄清楚如何在不更改方法簽名的情況下傳遞列表。
從Eclipse運行時它工作正常,但現在我注意到它編譯錯誤,當我做maven構建。我調用helper的那一行給出錯誤:「類型參數爲 void無法確定;對於類型變量T,沒有唯一的最大實例存在上限可執行」 –
acheron55
@ acheron55它似乎可以在[這裏](http:// ideone。 com/H3YslT)(sun-jdk-1.7.0_10)。你在使用Java 6或更早的版本嗎? –
是的,我正在使用Java 6.我認爲它是類似的問題在這裏:http://stackoverflow.com/questions/314572/bug-in-eclipse-compiler-or-in-javac作爲一個解決方法,我不得不說謊T,通過傳遞一個「硬編碼的」enum&marshallable類型給helper調用,我不太喜歡。 MarshallingTest fooHelper(clazz所)。 –
acheron55