2016-01-13 97 views
3

當我宣佈一個地圖或<對象,對象>我可以把任何東西在這個地圖差<對象,對象>

Map map = new HashMap(); 
map.put(""); 

,但如果我把它聲明爲地圖<?, ?>我可以放任何東西

Map<?,?> map = new HashMap(); 
map.put(""); 

它會出錯爲什麼?

+1

http://bayou.io/draft/Capturing_Wildcards.html – ZhongYu

回答

0

對於這個代碼段:

Map<?,?> map = new HashMap(); 

Map<?,?>指輸入一個未知的類型的地圖。
問號(?),被稱爲通配符,通配​​符的意思是「值類型參數可以是任何東西」,它並不意味着「你可以使用它,就好像它是你想要的任何東西一樣」。
欲瞭解更多信息請訪問link

1
Map<?,?> map = new HashMap<Integer, Integer>(); // compiles just fine! 

?代表了一些固定的,但未知類型。您不能將""置於Map<Integer, Integer>中,並且Map<?, ?>可以是任何類型的Map,包括Map<Integer, Integer>

+0

我如何使用它,我宣佈一個地圖,但我不能老是放任何東西它 – Wangbo

+0

@Wangbo你*不應該*使用它的地圖,你要把東西進去。儘管如此,您可以將它用於您要取出的地圖。 –

1

在java收集框架,?意味着未知類型。您只能從中讀取元素,但不能添加除NULL值之外的元素。

所以,你可以編譯罰款象下面這樣:

Map<?,?> map = new HashMap(); 
    map.put(null, null); 
相關問題