2011-03-22 128 views
1

我發現了這一點,它似乎是工作,我想重複槽的HashMap:如何刪除警告的Java

Iterate through a HashMap

但是這個代碼段表示警告,我沒有知道如何讓它不告訴他們:

Iterator it = map.entrySet().iterator(); 
Map.Entry pairs = (Map.Entry) it.next(); 

有沒有辦法來「修理」這個不用suppressWarnings註解?

+2

你有沒有試過這個:http://stackoverflow.com/questions/1066589/java-iterate-through-hashmap/1066607#1066607 – OscarRyz 2011-03-22 22:52:27

+0

爲什麼你不想使用@SuppressWarnings註釋?這就是它的目的。 – 2011-03-22 22:55:16

+0

@它咕嚕你開玩笑嗎? '@ SuppressWarnings'是最後的手段,肯定不會被用於你可以很容易修復的東西。 – maaartinus 2011-03-22 23:01:49

回答

7

是的,使用正確的通用定義itpairs - 假設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 
0

我假設你得到的警告,你會想是這樣的,我認爲:

Iterator<Map.Entry> it = map.entrySet().iterator(); 
Map.Entry pairs = it.next(); 

這些警告都報錯,因爲你」請不要指定Iterator正在迭代的類型,因此在將其轉換爲Map.Entry時,它可能是不安全的投射。指定類型意味着編譯器可以確保事物具有預期類型(在這種情況下,甚至不需要執行強制轉換)。

+0

當你嘗試和使用'pairs'時,這會給你一個警告/投射 – dty 2011-03-22 22:49:02

+0

@dty雖然這是真的,如果沒有發佈代碼,我無法真正解決它,併發布它應該是什麼。我希望上面的例子能說明這個概念,然後海報可以找出代碼的其餘部分如何工作。 – Melv 2011-03-22 22:50:33

1

爲什麼不只是使用for循環,因爲有72個upvotes的答案表明。

0

另一個簡單的解決方案是創建兩個相同大小的字符串數組......一個保持鍵,另一個保持值...保持它們的順序正確,並且可以使用for循環來獲取鍵和任何索引的值。

當然,它不像從地圖上獲取密鑰和使用迭代器那樣的花哨......但它的工作原理。

0

首先,你應該更好地宣告你的地圖:

Map<String, Object> map = ... 

如果以這種方式宣告,那麼你將能夠使用map.entrySet()其回報,你設定的Map.Entry元素(不任何警告)