首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当我在Java中迭代非泛型映射时编译器报错

当我在Java中迭代非泛型映射时编译器报错
EN

Stack Overflow用户
提问于 2010-10-11 15:44:34
回答 2查看 4.4K关注 0票数 5

在Java中迭代非泛型映射时遇到奇怪的问题

代码语言:javascript
代码运行次数:0
运行
复制
Map map=new HashMap();
for (Map.Entry entry:map.entrySet()){

}

但是编译器抱怨说“类型不匹配:无法从元素类型Object转换为Map.Entry”当我将映射类型更改为泛型时,它可以工作

代码语言:javascript
代码运行次数:0
运行
复制
Map<Object,Object> map=new HashMap<Object,Object>();
for (Map.Entry entry:map.entrySet()){

}

这让我很困惑,有人知道原因是什么吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-11 15:59:25

当您使用原始类型时,就像您在这里对Map所做的那样,所有的泛型都被关闭了,所以entrySet()只返回一个空的Set类型(而不是Set<Map.Entry whatever>),如果您遍历它,您只能从中获得Object

票数 7
EN

Stack Overflow用户

发布于 2010-10-11 15:54:18

为什么这个不起作用?

这取决于你的编译器。

在Mac上使用javac 1.6.0_20,我没有任何问题。

也许正如@newacct建议的那样,泛型已被用于扩展的for语句。但是,由于它依赖于您的编译器(而不是JLS),因此很难确切地知道原因。

如何更改才能正常工作?

Map.Entry是一个泛型类,所以如果您选择在应用程序中使用泛型,则应该在任何地方使用它们。

代码语言:javascript
代码运行次数:0
运行
复制
Map<Object,Object> map=new HashMap<Object,Object>();
for (Map.Entry<Object, Object> entry:map.entrySet()){

}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3904362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档