當我宣佈一個地圖或<對象,對象>我可以把任何東西在這個地圖差<對象,對象>
Map map = new HashMap();
map.put("");
,但如果我把它聲明爲地圖<?, ?>我可以放任何東西
Map<?,?> map = new HashMap();
map.put("");
它會出錯爲什麼?
當我宣佈一個地圖或<對象,對象>我可以把任何東西在這個地圖差<對象,對象>
Map map = new HashMap();
map.put("");
,但如果我把它聲明爲地圖<?, ?>我可以放任何東西
Map<?,?> map = new HashMap();
map.put("");
它會出錯爲什麼?
對於這個代碼段:
Map<?,?> map = new HashMap();
Map<?,?>
指輸入一個未知的類型的地圖。
問號(?),被稱爲通配符,通配符的意思是「值類型參數可以是任何東西」,它並不意味着「你可以使用它,就好像它是你想要的任何東西一樣」。
欲瞭解更多信息請訪問link
Map<?,?> map = new HashMap<Integer, Integer>(); // compiles just fine!
?
代表了一些固定的,但未知類型。您不能將""
置於Map<Integer, Integer>
中,並且Map<?, ?>
可以是任何類型的Map
,包括Map<Integer, Integer>
。
我如何使用它,我宣佈一個地圖,但我不能老是放任何東西它 – Wangbo
@Wangbo你*不應該*使用它的地圖,你要把東西進去。儘管如此,您可以將它用於您要取出的地圖。 –
在java收集框架,?意味着未知類型。您只能從中讀取元素,但不能添加除NULL值之外的元素。
所以,你可以編譯罰款象下面這樣:
Map<?,?> map = new HashMap();
map.put(null, null);
http://bayou.io/draft/Capturing_Wildcards.html – ZhongYu