Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我在Java中迭代非泛型映射时,编译器会抱怨_Java_Generics - Fatal编程技术网

当我在Java中迭代非泛型映射时,编译器会抱怨

当我在Java中迭代非泛型映射时,编译器会抱怨,java,generics,Java,Generics,我在Java中迭代非泛型映射时遇到了weired问题 Map map=new HashMap(); for (Map.Entry entry:map.entrySet()){ } 但编译器抱怨说“类型不匹配:无法从元素类型对象转换为Map.Entry” 当我将映射类型更改为泛型时,它可以工作 Map<Object,Object> map=new HashMap<Object,Object>(); for (Map.Entry entry:map.entrySet())

我在Java中迭代非泛型映射时遇到了weired问题

Map map=new HashMap();
for (Map.Entry entry:map.entrySet()){

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

Map<Object,Object> map=new HashMap<Object,Object>();
for (Map.Entry entry:map.entrySet()){

}
Map Map=newhashmap();
对于(Map.Entry:Map.entrySet()){
}

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

为什么这个不行?

这取决于你的编译器

使用Mac上的JavaC1.6.020,我没有任何问题

也许正如@newacct所建议的,泛型被用于扩展for语句。但是,由于这取决于编译器(而不是JLS),因此要确切地知道原因并不容易

如何将其更改为工作模式?

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

Map<Object,Object> map=new HashMap<Object,Object>();
for (Map.Entry<Object, Object> entry:map.entrySet()){

}
Map Map=newhashmap();
对于(Map.Entry:Map.entrySet()){
}

当您使用原始类型时,就像您在这里使用
Map
一样,所有泛型都被关闭,因此
entrySet()
只返回一个裸露的
Set
类型(而不是
Set
),如果您对它进行迭代,您只能从中获取
对象。

在JDK1.5
Map.entrySet()之前
返回了一个
集合
(属于
Map.Entry的
,但您无法直接判断)。

Set entries=map.entrySet();
Map.Entry=(Map.Entry)entries.iterator().next();//@事实上,它在一些编译器(这里是javac)上编译,甚至没有警告。 Set entries = map.entrySet(); Map.Entry entry = (Map.Entry) entries.iterator().next(); // <-- notice the cast!