无法创建名为Entry的类

时间:2017-06-29 09:18:32

标签: java hashmap naming

以下代码无法编译,并显示以下错误消息:

  

类型不匹配:无法从元素类型Test1.Entry转换为   Map.Entry的

我的问题是,在使用Entry时,我们不能在项目中使用名为hash map的类吗?为什么会出现这个错误,虽然我没有在这里导入任何Entry类。

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class Test1 {

    public static class Entry<T> {
        public String m() {
            return "A";
        }
    }

    public static void main(String[] args) {
        final Set<Entry> a = new HashSet<>();

        new HashMap<String, Entry>() {
            {
                for (final Entry entry : a) {
                    put(entry.m(), entry);
                }
            }
        };
    }
}

有什么方法可以让这个类名和代码成功编译。

4 个答案:

答案 0 :(得分:1)

您的姓名存在问题:

您的Entry<T>java.util.Map.Entry<K, V>

的某个时刻出现了阴影

只需将条目重命名为其他内容

public static class MyEntry<T> {
    public String m() {
        return "A";
    }
}

答案 1 :(得分:1)

您需要告诉编译器您要使用java.util提供的Entry接口。

由于您在使用它的同一个包中已经有一个名为Entry的类,因此它是隐式导入的。对于您打算在java.util中使用Entry的所有地方,您必须明确使用java.util.Map.Entry而不是Entry。这样你就可以使用这两个类。

答案 2 :(得分:1)

由于您使用的是double brace initialization,因此会在该区块中公开地图内部。

重命名Entry类或将初始化代码移出HashMap的init块,这样您的Entry就不会影响地图内部Entry实施。< / p>

final HashMap<String, Entry> map = new HashMap<>();
for (final Entry entry : a) {
   map.put(entry.m(), entry);
}

答案 3 :(得分:0)

此快照可能会让您怀疑,

enter image description here

正如错误弹出窗口所述,编译器认为在你的for循环中它是java.util.Map.Entry但你想在这里遍历你的自定义Entry类。

即使您认为自己没有导入java.util.Map.Entry,请尝试删除第一个导入(即HashMap),您将看到不再出现不兼容的类型错误。

您可以尝试任何建议的解决方法来解决此问题。