Java 混淆型关系
我最近在这个网站上看到了以下内容:Java 混淆型关系,java,Java,我最近在这个网站上看到了以下内容: for (HashMap.Entry<Object,Object> e : new TreeMap<>().entrySet()) System.out.println(e); 恰巧TreeMap定义了TreeMap.Entry,它隐藏了Map.Entrynew TreeMap().entrySet()返回Set,您正在迭代集合的每个条目(Entry)。因此,它进行了编译。在Java8中,您可以像 new TreeMap<
for (HashMap.Entry<Object,Object> e : new TreeMap<>().entrySet())
System.out.println(e);
恰巧TreeMap
定义了TreeMap.Entry
,它隐藏了Map.Entrynew TreeMap().entrySet()返回Set
,您正在迭代集合的每个条目(Entry)
。因此,它进行了编译。在Java8中,您可以像
new TreeMap<>().entrySet().forEach(System.out::println);
newtreemap().entrySet().forEach(System.out::println);
尽管您在HashMap
上访问它,条目
实际上是映射
中声明的(隐式静态
)成员类型TreeMap#entrySet
的返回类型为Set
。这是相同的Entry
类型。我认为这是Map。Entry:如果您的TreeMap
实际上有条目,您可能会遇到问题ClassCastException
。@Powerlord我已经更新了问题;实际上我已经试过了,但是在这个网站上发布了原始的代码片段。嗯。。。经过检查,这显然是正确的,但这样的语言规则似乎确实会引起混乱。HashMap
从接口继承类型Entry
有什么好处?@WilliamF.Jameson我不确定。如果已经导入了类型HashMap
,则不需要导入类型Map
。(虽然这似乎还不足以作为理由。)不,这个理由太弱,无法弥补这些麻烦:)(顺便说一句,你是说进入而不是地图)。@WilliamF.Jameson对不起,我离开了一会儿。您指的是哪个Entry
vsMap
?上面,我是说,如果您有import java.util.HashMap
,您可以使用HashMap.Entry
而不是Map.Entry
,这需要另一个import java.util.Map
。我正在迭代静态类型的HashMap.Entry
,而不仅仅是Entry
,我不明白您在这里的意思。
new TreeMap<>().entrySet().forEach(System.out::println);