对象无法转换为Entry <String,Integer>

GGi*_*tto 1 java hashmap

当我尝试循环我的hashmap时出现此错误,我不知道为什么.

对象无法转换为Entry

进入package1:

protected static final Map<String, Integer> distanceLabels = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

进入包有错误的包:

Map distanceLabels = package1.distanceLabels;
for (Map.Entry<String, Integer> entry : distanceLabels.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*tto 9

只需更换:

Map distanceLabels = package1.distanceLabels;
Run Code Online (Sandbox Code Playgroud)

有了这个

Map<String, Integer> distanceLabels = package1.distanceLabels;
Run Code Online (Sandbox Code Playgroud)

事实上,如果你不指定任何parameterized types到地图的声明,编译器无法知道parameterized types的的entries这也是他为什么,因为你希望产生一个错误的原因entries特定的类型.

您需要在两个地方保持一致,以便实际上有两种方法可以修复它,您不能像上面那样在两者之间做一些事情:

  1. 您可以parametrized types在上面提出的两个地方明确指定,这显然是最好的方法
  2. 您可以创建一个raw typeMap像你一样(没有定义参数化类型)和创建raw typeMap.Entry,但那么你将不得不明确地投你key和你value的预期类型.