2016-08-06 29 views
0
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()); 
     } 
    } 
} 

Compile FehlerLooping durch Eintrag Set enthalten Objekte

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

I Schlüssel-Wert-Paar für jeden Eintrag Typen Objekt im Set s drucken versuchen. Aber es gibt einen Fehler bei der Kompilierung, wie oben gezeigt. Aber Code funktioniert gut, wenn ich "s" durch "h.entrySet()" ersetze und gut schleift..Wie hilft der Verweis auf "h.entrySet()", Kompilierungsfehler zu verursachen?

Antwort

1

Die Linie

Set s = h.entrySet(); 

sollte

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

weil für jede Schleife unten nicht weiß, welche Art von Set s ist?

Dieser Code funktioniert:

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()); 
     } 
    } 
} 

Wann immer Sie

incompatible types: Object cannot be converted to.. error 

sehen es bedeutet JVM versucht, verdeckte Objekttyp zu einem anderen Typ und es führt zu Übersetzungsfehler. Hier passiert es in der for-Schleife.