我发现了这一点,它似乎是工作,我想重复槽的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