首先创建一个没有加泛型的HashMap
Map map=new HashMap();
今天发现遍历的时候
for(Entry entry:map.entrySet())
会报错,必须加泛型才可以不知道为什么,而下面这张不加泛型都可以
Iterator  iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Entry entry=(Entry) iterator.next();
}

解决方案 »

  1.   

    那就加上泛型了, 你上边省去了强转,类型不匹配。  for(Object entry:map.entrySet())  下边在强转就不报错了
      

  2.   

    因为接口Entry是定义在Map中,就是Map的内部接口,
    这样定义的
    interface Entry<K, V> {
    K getKey();
    V getValue();
    V setValue(V value);
    boolean equals(Object o);
    int hashCode();
    }
    接口定义的时候就已经包含泛型了
    Map中的entrySet方法这样定义的:
    Set<Map.Entry<K, V>> entrySet();
    返回值定义也是包含了泛型,所以不添加泛型的Map是不能这样遍历的。不添加泛型的Map可以这样遍历
    Map map = new HashMap();
    map.put(1, 2);
    for (Object o : map.keySet()) {
    System.out.println(o + "," + map.get(o));
    }
      

  3.   

    是因为你的 map.entrySet(); 返回值 是一个set类型 
    for(Entry entry:map.entrySet())  执行了2步操作,1得到 set ,但是set 的类型 没有指定,那么默认就是 object,2 for循环 set 你使用了  Entry  去遍历 类型为 Object的 set报错
      Map map=new HashMap();
            map.put("A",1);
            map.put("B",2);
            Set<Map.Entry>  set = map.entrySet();
            for(Map.Entry entry: set){
                System.out.println(entry.getKey()+" "+entry.getValue());
            }