2012-05-10 59 views
2

爲什麼下面的代碼給一個編譯時錯誤。錯誤泛型代碼

Map<String,? extends Object> inputMap = 
       new HashMap<String, ? extends Object>(); 

編譯時錯誤。

無法實例HashMap<String,? extends Object>

我想用String作爲鍵地圖和該類型接受任何對象作爲價值

回答

6

?並不意味着「採取任何對象」。它意味着「採取特定類型的對象,這恰好是未知的」,這在實際創建容器時沒有意義。

試試這個:

Map<String,Object> inputMap = new HashMap<String,Object>(); 
6

這是因爲你需要指定值的類型那HashMap應該包含。基本上,在實例化類時不能使用通配符。

這工作雖然罰款:

Map<String, ? extends Object> inputMap = new HashMap<String, Object>(); 

然而,他說,?應該延伸Object是一種多餘的,因爲一切都擴展對象(你當然可以有你的真實代碼的東西比Object其他)。

+1

如果你這樣做,但是,你不能把任何東西在你的地圖(如它的唯一的參考是通配符通用)。 –

+1

的確如此。我只是試圖說明它實際上需要具體的類型參數。 – aioobe