在Java中迭代非泛型映射时遇到奇怪的问题
Map map=new HashMap();
for (Map.Entry entry:map.entrySet()){
}
但是编译器抱怨说“类型不匹配:无法从元素类型Object转换为Map.Entry”当我将映射类型更改为泛型时,它可以工作
Map<Object,Object> map=new HashMap<Object,Object>();
for (Map.Entry entry:map.entrySet()){
}
这让我很困惑,有人知道原因是什么吗?提前谢谢。
发布于 2010-10-11 07:59:25
当您使用原始类型时,就像您在这里对Map
所做的那样,所有的泛型都被关闭了,所以entrySet()
只返回一个空的Set
类型(而不是Set<Map.Entry whatever>
),如果您遍历它,您只能从中获得Object
。
发布于 2010-10-11 07:54:18
为什么这个不起作用?
这取决于你的编译器。
在Mac上使用javac 1.6.0_20,我没有任何问题。
也许正如@newacct建议的那样,泛型已被用于扩展的for语句。但是,由于它依赖于您的编译器(而不是JLS),因此很难确切地知道原因。
如何更改才能正常工作?
Map.Entry是一个泛型类,所以如果您选择在应用程序中使用泛型,则应该在任何地方使用它们。
Map<Object,Object> map=new HashMap<Object,Object>();
for (Map.Entry<Object, Object> entry:map.entrySet()){
}
https://stackoverflow.com/questions/3904362
复制相似问题