![](/img/trans.png)
[英]Why am I getting a IllegalArgumentException in my Android App?
[英]Why am I getting an IllegalArgumentException when creating a Map?
我正在嘗試創建一個城市和溫度的地圖,但它正在拋出IllegalArgumentException
。 這是我正在做的事情:
Map<String, Integer> tempMap = Map.of("London", 13, "Paris", 17, "Amsterdam", 13,
"Madrid", 21, "Rome", 19, "London", 13, "Bonn", 14,
"Moscow", 7, "Barcelona", 20, "Berlin", 15);
如果我逐個添加它們就沒問題了:
Map<String, Integer> tempMap = new Hashmap<>(); // or LinkedHashMap
tempMap.put("London", 13);
tempMap.put("Madrid", 21);
tempMap.put("Moscow", 7);
// etc.
為什么會這樣? 內容應該是不一樣的嗎?
為什么會這樣?
因為您的實例化中有一個重復的鍵: "London"
。 Map
和Set
的不可變靜態工廠不允許重復(如果映射條目的鍵是重復的,則映射條目是重復的) - 不是在創建期間 - 因此根本不是。 拋出的IllegalArgumentException
表明了這種限制。
雖然從技術上講你沒有做任何不兼容的事情,但是圖書館的作者認為這是一個(可能是復制粘貼)的錯誤。 為什么要添加一個項目只是為了稍后覆蓋幾行?
這讓我想到......
如果我逐個添加它們就沒問題了
這就是你的想法,只有你可能沒有意識到你的地圖將包含少於你輸入的1個條目。 重復條目會覆蓋前一個條目(“最后一個勝利”規則)。 當因此發生錯誤時,會出現很多問號。 出於這個原因, 快速失敗的方法有其優點(雖然我不會提倡它只是更好)。
作為提示,在創建地圖時,如果您將其格式化,則更容易看到其內容:
Map<String, Integer> tempMap = Map.of(
"London", 13,
"Paris", 17,
"Amsterdam", 13,
"Madrid", 21,
"Rome", 19,
"London", 13, // !
"Bonn", 14,
"Moscow", 7,
"Barcelona", 20,
"Berlin", 15
);
他們在創建時拒絕重復的密鑰。 傳遞給靜態工廠方法的重復鍵導致
IllegalArgumentException
。
因為,每個奇數參數是鍵,偶數是Map
值。 您需要確保odd-number參數是唯一的。
另一方面, Map.put
將替換相同鍵的舊值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.