Java &引用;“不兼容类型”;在使用JDK1.7的foreach中-1.6没有错误

Java &引用;“不兼容类型”;在使用JDK1.7的foreach中-1.6没有错误,java,java-7,Java,Java 7,我的代码类似于以下代码,使用jdk 1.6.0_22编译,但不使用jdk 1.7.0_79编译: for(Entry<A, B> entry: aBean.getData().entrySet()) { } 使用局部变量保存集合时,错误消失: Set<Entry<A, B>> mySet = aBean.getData().entrySet(); for(Entry<A, B> entry: mySet) { } //works Set myS

我的代码类似于以下代码,使用jdk 1.6.0_22编译,但不使用jdk 1.7.0_79编译:

for(Entry<A, B> entry: aBean.getData().entrySet()) { }
使用局部变量保存集合时,错误消失:

Set<Entry<A, B>> mySet = aBean.getData().entrySet();
for(Entry<A, B> entry: mySet) { } //works
Set mySet=aBean.getData().entrySet();
对于(条目:mySet){}//works

考虑到它是在1.6下编译的,我认为这是一个编译错误,对吗?如果没有,我做错了什么?

您已经用Java 8测试过了吗?如果最新的(也是唯一受支持的)Java版本仍然存在此问题,我建议您创建一个新版本


否则,请使用您在问题中提供的解决方案。

如果为(java.util.Map.Entry:aBean.getData().entrySet()){}编写,是否也会出现编译错误?我在我的JDK1.7.079上尝试了您的原始代码,它运行得非常好。在第二个编译示例中,哪个类(包括包路径)是“条目”?可能是aBean.getData()返回的不是java.util.Map,而是另一个自定义映射类。不,@subrunner,该方法返回一个HashMap。当我提取对局部变量的方法调用时,代码是编译的,这一点很明显,映射和条目导入工作与预期一样。当我使用Map.Entry或java.util.Map.Entry时,仍然会引发相同的编译错误。如果不保存entrySet,而是将映射本身保存到局部变量,会发生什么?它能编译吗?@subrunner是的,它也能编译。这似乎越来越像一个编译器错误。。。
Set<Entry<A, B>> mySet = aBean.getData().entrySet();
for(Entry<A, B> entry: mySet) { } //works