我看到一些行为,我不明白在泛型类型的Map.entrySet。如果我遍历一个类型化的地图,我会得到预期的类型,例如奇怪的java类型的行为
HashMap<A,B> map = new HashMap<>();
for(Map.Entry<A,B> e: map.entrySet(){ ... }
但是,如果我有一个类型化的地图,条目集的迭代式被报道对象:
HashMap map = new HashMap();
a) for (Map.Entry e: map.entrySet(){ ... } // this will fail, e is being reported as "Object"
b) for (Object o: map.entrySet(){ ... } // this is compilable.
我不应该能够得到一个无类型条目的声明一个)?如果我看在JVM中的HashMap的实现中,我看到:
c) public Set<Map.Entry<K,V>> entrySet() { ...
这种行为似乎暗示,由于K,没有在第二个例子中指定的V,在设置内容不知何故整个打字c)被省略。任何人都可以对此有所了解吗?这是预期的行为?
看看[这个问题](http://stackoverflow.com/q/22744197/1679863) –
如果有一件事是生的,其他一切都变成生的;它不仅仅被视为“对象”。 (这就是为什么你从不在新代码中使用rawtypes的原因。) –