Цикл по множеству, содержащему объекты Entry

import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        HashMap<Integer,String> h = new HashMap<Integer,String>();
        h.put(100,"Hola");
        h.put(101,"Hello");
        h.put(102,"light");
        System.out.println(h); // {100=Hola, 101=Hello, 102=light}
        Set s = h.entrySet();
        System.out.println(s); // [100=Hola, 101=Hello, 102=light] 
        for(Map.Entry<Integer,String> ent : s)
        {
            System.out.println("Key=" + ent.getKey() + " Value=" + ent.getValue());
        }
     }
}

Ошибка компиляции

HelloWorld.java:13: error: incompatible types: Object cannot be converted to Entry<Integer,String>                                                                                         
        for(Map.Entry<Integer,String> ent : s)                                                                                                                                             
                                            ^ 

Я пытаюсь напечатать пару ключ-значение для каждого объекта типа записи в наборе s. Но это дает ошибку времени компиляции, показанную выше. Но код работает нормально, если я заменяю "s" на " h.entrySet()" и зацикливается нормально... Как использование ссылки для хранения " h.entrySet()" вызывает ошибку компиляции?

1 ответ

Решение

Линия

Set s = h.entrySet();

должно быть

 Set<Map.Entry<Integer,String>> s = h.entrySet();

потому что для каждого цикла ниже не знаю, какой тип Set s?

Этот код работает:

import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        HashMap<Integer,String> h = new HashMap<Integer,String>();
        h.put(100,"Hola");
        h.put(101,"Hello");
        h.put(102,"light");
        System.out.println(h); // {100=Hola, 101=Hello, 102=light}
        Set<Map.Entry<Integer,String>> s = h.entrySet();
        System.out.println(s); // [100=Hola, 101=Hello, 102=light] 
         for(Map.Entry<Integer,String> ent : s)
        {
            System.out.println("Key=" + ent.getKey() + " Value=" + ent.getValue());
        }
     }
}

Всякий раз, когда вы видите

incompatible types: Object cannot be converted to.. error

это означает, что JVM пытается преобразовать тип объекта в другой тип, и это приводит к ошибке компиляции. Здесь это происходит в цикле for.

Другие вопросы по тегам