我最近在这个网站上看到了以下内容:
for (HashMap.Entry<Object,Object> e : new TreeMap<>().entrySet())
System.out.println(e);
令我惊讶的是,这编译并运行良好。我也尝试在地图中添加条目,因此实际上有一些内容可以向下转换,但是这样做也失败了,这也很好。如何将TreeMap
条目转换为HashMap.Entry
?这两个甚至不在层次结构的同一分支上。
虽然现在已经解决了这个问题,但我还是将以下内容仅仅包含在内,以下没有编译:
for (TreeMap.Entry<Object,Object> e : new HashMap<>().entrySet())
System.out.println(e);
TreeMap
定义TreeMap.Entry
,隐藏了Map.Entry
。
答案 0 :(得分:9)
虽然您是在HashMap
上访问它,但Entry
实际上是static
中声明的(隐式Map
)成员类型。 TreeMap#entrySet
的返回类型为Set<Map.Entry<K,V>>
。这是Entry
类型。
答案 1 :(得分:1)
new TreeMap<>().entrySet() returns Set<Map.Entry<K,V>>
并且您正在迭代集(Entry<Object, Object>)
的每个条目。因此它编译。在java 8中,您可以替换for循环,如
new TreeMap<>().entrySet().forEach(System.out::println);