我發現了這一點,它似乎是工作,我想重複槽的HashMap:如何刪除警告的Java
但是這個代碼段表示警告,我沒有知道如何讓它不告訴他們:
Iterator it = map.entrySet().iterator();
Map.Entry pairs = (Map.Entry) it.next();
有沒有辦法來「修理」這個不用suppressWarnings註解?
我發現了這一點,它似乎是工作,我想重複槽的HashMap:如何刪除警告的Java
但是這個代碼段表示警告,我沒有知道如何讓它不告訴他們:
Iterator it = map.entrySet().iterator();
Map.Entry pairs = (Map.Entry) it.next();
有沒有辦法來「修理」這個不用suppressWarnings註解?
是的,使用正確的通用定義it
和pairs
- 假設map
被正確定義。
例如:
Map<String, Integer> map = ...;
Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
Map.Entry<String, Integer> pairs = it.next(); // no need for cast
我假設你得到的警告,你會想是這樣的,我認爲:
Iterator<Map.Entry> it = map.entrySet().iterator();
Map.Entry pairs = it.next();
這些警告都報錯,因爲你」請不要指定Iterator
正在迭代的類型,因此在將其轉換爲Map.Entry
時,它可能是不安全的投射。指定類型意味着編譯器可以確保事物具有預期類型(在這種情況下,甚至不需要執行強制轉換)。
爲什麼不只是使用for循環,因爲有72個upvotes的答案表明。
另一個簡單的解決方案是創建兩個相同大小的字符串數組......一個保持鍵,另一個保持值...保持它們的順序正確,並且可以使用for循環來獲取鍵和任何索引的值。
當然,它不像從地圖上獲取密鑰和使用迭代器那樣的花哨......但它的工作原理。
首先,你應該更好地宣告你的地圖:
Map<String, Object> map = ...
如果以這種方式宣告,那麼你將能夠使用map.entrySet()其回報,你設定的Map.Entry元素(不任何警告)
你有沒有試過這個:http://stackoverflow.com/questions/1066589/java-iterate-through-hashmap/1066607#1066607 – OscarRyz 2011-03-22 22:52:27
爲什麼你不想使用@SuppressWarnings註釋?這就是它的目的。 – 2011-03-22 22:55:16
@它咕嚕你開玩笑嗎? '@ SuppressWarnings'是最後的手段,肯定不會被用於你可以很容易修復的東西。 – maaartinus 2011-03-22 23:01:49