2014-05-02 109 views
1

今天我偶然發現了這個錯誤,我並不完全明白問題所在。類型與Java泛型和匿名類不匹配

我有一個簡單的界面

public interface MyInterface 
{ 
} 

然後我嘗試創建一個Guava ImmutableSet使用of()方法傳遞一個匿名類的實例。

ImmutableSet<MyInterface> a = ImmutableSet.of(new MyInterface() 
{ 
}); 

編譯器不喜歡它:

Type mismatch: cannot convert from ImmutableSet<new MyInterface(){}> to ImmutableSet<MyInterface> 

什麼樣的類型是ImmutableSet<new MyInterface(){}>?我不熟悉這個語法。

+0

嘗試'<?實現MyInterface>'。 (不確定)。 :-) – Astrobleme

+0

[Java泛型類型轉換拼圖]可能的重複(http://stackoverflow.com/questions/10555773/java-generics-type-conversion-puzzle) – durron597

+0

@ durron597我不同意。我面臨的問題與匿名類直接相關。 – GuiSim

回答

3

這是Java 8中類型推斷功能改進的一部分,它在其中起作用。在Java 8中,可以從使用表達式的上下文中推斷出類型參數。在這裏,它被用在一個賦值表達式ImmutableSet<MyInterface>變量中。

這在Java 7中

是不是真的在Java 7,你可以做

ImmutableSet<MyInterface> a = ImmutableSet.<MyInterface>of(new MyInterface() { 
}); 

明確設置類型參數。