2012-01-30 125 views
8

爲什麼Map<String, ?> test = ImmutableMap.builder().build();無法編譯,但Map<String, ?> test = ImmutableMap.<String, Object>builder().build();工作正常嗎?爲什麼ImmutableMap.builder()。build()沒有選擇正確的類型參數?

error: incompatible types 
    Map<String, ?> test = ImmutableMap.builder().build(); 
               ^
    required: Map<String,?> 
    found: ImmutableMap<Object,Object> 

相信番石榴的提交意味着這個工作:與

第一個代碼sniplet失敗。

回答

16

這不是Guava的失敗,而是Java解決泛型的方式,而這是我們無法控制的。 =(

相信我們:這是什麼,我們就花了很多時間在這個issue,凱文提到,我們沒有試圖不到十五的方法試圖讓你沒得得到它明確指定類型參數。

如果你只在ImmutableMap.builder().build()的情況感興趣,那就是,在地圖上沒有條目...那麼你應該使用ImmutableMap.of(),這不會有任何問題,搞笑仿製藥:它只會工作

+0

這是可以在語言中修復的東西嗎?也就是說,我們可以向Oracle提交錯誤報告嗎? – Gili 2012-01-30 04:17:21

+0

不可能,我很害怕。如果他們沒有將它與Java 7中的鑽石運算符進行增強類型推斷,我懷疑它們可以包含它。可能有些奇怪的邊緣案例由於某種原因無法管理,但我不確定具體情況。 – 2012-01-30 04:24:39

+0

@Gili:我知道有一些工作可以改進Java 8的類型推斷......這個_may_是可以用改進的規則推斷出來的東西,我不確定。 – ColinD 2012-01-30 13:25:22

相關問題