无法创建名为 Entry 的 class
Unable to create a class with name Entry
以下代码编译失败,错误消息如下:
Type mismatch: cannot convert from element type Test1.Entry to
Map.Entry
我的问题是我们不能在我们的项目中使用 class 和名称 Entry
而同时使用 hash map
吗?为什么会出现这个错误,尽管我没有在此处导入任何 Entry
class。
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);
}
}
};
}
}
有什么方法可以保留这个 class 名称并且代码可以成功编译。
你的名字有问题:
您的 Entry<T>
在某些时候正在跟踪 java.util.Map.Entry<K, V>
只需将条目重命名为其他名称
public static class MyEntry<T> {
public String m() {
return "A";
}
}
你需要告诉编译器你想使用java.util提供的Entry接口。
因为您在使用它的同一个包中已经有一个名为 Entry
的 class,因此它被隐式导入。对于您打算使用 java.util 中的 Entry
的所有地方,您必须明确使用 java.util.Map.Entry
而不仅仅是 Entry
。这样你就可以同时使用 classes.
由于您使用的是 double brace initialization 地图内部结构在该块中公开。
重命名 Entry
class 或将初始化代码移出 HashMap
的初始化块,这样您的 Entry
就不会隐藏映射内部 Entry
实施。
final HashMap<String, Entry> map = new HashMap<>();
for (final Entry entry : a) {
map.put(entry.m(), entry);
}
这张快照可能会消除您的疑虑,
如错误弹出窗口所述,编译器认为在您的 for 循环中它是 java.util.Map.Entry,但您想在此处遍历您的自定义 Entry
class。
即使您假设您没有导入 java.util.Map.Entry
,请尝试删除第一个导入(即 HashMap),您将看到您不再收到不兼容类型错误。
您可以尝试任何建议的解决方法来解决此问题。
以下代码编译失败,错误消息如下:
Type mismatch: cannot convert from element type Test1.Entry to Map.Entry
我的问题是我们不能在我们的项目中使用 class 和名称 Entry
而同时使用 hash map
吗?为什么会出现这个错误,尽管我没有在此处导入任何 Entry
class。
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);
}
}
};
}
}
有什么方法可以保留这个 class 名称并且代码可以成功编译。
你的名字有问题:
您的 Entry<T>
在某些时候正在跟踪 java.util.Map.Entry<K, V>
只需将条目重命名为其他名称
public static class MyEntry<T> {
public String m() {
return "A";
}
}
你需要告诉编译器你想使用java.util提供的Entry接口。
因为您在使用它的同一个包中已经有一个名为 Entry
的 class,因此它被隐式导入。对于您打算使用 java.util 中的 Entry
的所有地方,您必须明确使用 java.util.Map.Entry
而不仅仅是 Entry
。这样你就可以同时使用 classes.
由于您使用的是 double brace initialization 地图内部结构在该块中公开。
重命名 Entry
class 或将初始化代码移出 HashMap
的初始化块,这样您的 Entry
就不会隐藏映射内部 Entry
实施。
final HashMap<String, Entry> map = new HashMap<>();
for (final Entry entry : a) {
map.put(entry.m(), entry);
}
这张快照可能会消除您的疑虑,
如错误弹出窗口所述,编译器认为在您的 for 循环中它是 java.util.Map.Entry,但您想在此处遍历您的自定义 Entry
class。
即使您假设您没有导入 java.util.Map.Entry
,请尝试删除第一个导入(即 HashMap),您将看到您不再收到不兼容类型错误。
您可以尝试任何建议的解决方法来解决此问题。