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.Entry

new 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
vs
Map
?上面,我是说,如果您有
import java.util.HashMap
,您可以使用
HashMap.Entry
而不是
Map.Entry
,这需要另一个
import java.util.Map
。我正在迭代静态类型的
HashMap.Entry
,而不仅仅是
Entry
,我不明白您在这里的意思。
new TreeMap<>().entrySet().forEach(System.out::println);