以下代码无法编译,并显示以下错误消息:
类型不匹配:无法从元素类型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);
}
}
};
}
}
有什么方法可以让这个类名和代码成功编译。
答案 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)