令人困惑的类型关系

Wil*_*son 5 java

我最近在这个网站上看到了以下内容:

for (HashMap.Entry<Object,Object> e : new TreeMap<>().entrySet()) 
  System.out.println(e);
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这编译并运行良好.我也尝试在地图中添加条目,因此实际上有一些内容可以向下转换,但是这样做也失败了,这也很好.如何TreeMap输入一个条目HashMap.Entry?这两者甚至不在层次结构的同一分支上.

更新

虽然现在已经解决了这个问题,但我将以下内容仅仅包含在内以下 - 以下内容无法编译:

for (TreeMap.Entry<Object,Object> e : new HashMap<>().entrySet())
  System.out.println(e);
Run Code Online (Sandbox Code Playgroud)

碰巧TreeMap定义TreeMap.Entry,隐藏Map.Entry.

Sot*_*lis 9

虽然您正在访问它HashMap,但Entry实际上是一个(隐式static)声明的成员类型Map.TreeMap#entrySet有一个返回类型Set<Map.Entry<K,V>>.这是相同的Entry类型.