2016-10-03 2 views
1

Ich versuche, einige Werte von einem JSONObject in eine HashMap zu bekommen, aber ich erhalte ClassCastException in der letzten Zeile meiner for-Schleife.ClassCastException beim Versuch, Objekt in MapEntry zu transformieren

Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer 

Ich habe versucht, mapEntry.getValue explizit zu werfen() auf ganzzahlige aber ich halte den gleichen Fehler. wenn ich führen Sie den Code ohne die letzte Zeile ich folgende Ausgabe:

key: peter value: 33 
key: somekey value: 11 
key: steve value: 38 
key: guy value: 22 
key: name value: 54 

So kann ich sehen, dass mapEntry.getValue() scheint ganze Zahlen zu drucken, oder zumindest aber Zahlen, die ich sollte in der Lage zu werfen zu ganzen Zahlen.

JSONObject json = getJsonFromFile(filePath); 
HashMap<String, Integer> entries = new HashMap<>(); 

for (Object obj : json.entrySet()) { 
      Entry<String, Integer> mapEntry = (Entry<String, Integer>) obj; 
      System.out.println("key: " + mapEntry.getKey() + " value: " + mapEntry.getValue()); 
      entries.put(mapEntry.getKey(), mapEntry.getValue()); 
     } 
+0

Was ist der eigentliche Typ von 'obj'? –

+0

Ich werfe es explizit auf Entry , es ist genau das, was ich benutze, um durch den entrySet zu iterieren, nicht sicher, ob es bessere Möglichkeiten gibt, aber das schien gut zu funktionieren, bis dieser Bug auftauchte. – Jacco

+0

Was passiert, wenn Sie versuchen, den Eintrag zu verwenden? – pepan

Antwort

1

Wenn Sie versuchen, diese:

JSONObject json = getJsonFromFile(filePath); 
HashMap<String, Number> entries = new HashMap<>(); 

for (Object obj : json.entrySet()) { 
    Entry<String, Number> mapEntry = (Entry<String, Number>) obj; 
    System.out.println("key: " + mapEntry.getKey() + " value: " + mapEntry.getValue()); 
    entries.put(mapEntry.getKey(), mapEntry.getValue()); 
} 

Number ist die Super sowohl Integer und Long, sollte es in Ordnung kompilieren.

+0

Ah, natürlich! dies löst mein Problem, ich bin mir immer noch nicht sicher, warum ich meinen Fehler überhaupt bekommen habe, aber ich werde diese Lösung verwenden, bis ich einen Grund für das seltsame (meiner Meinung nach) Verhalten finde. – Jacco

Verwandte Themen