2011-03-22 193 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元素(不任何警告)