2016-10-03 3 views
1

Я пытаюсь получить некоторые значения из JSONObject в HashMap, но я продолжаю получать ClassCastException в последней строке цикла for.ClassCastException при попытке применить объект к MapEntry

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

Я попытался явно привести mapEntry.getValue() в целом, но я получаю ту же ошибку. если я запускаю код без последней строки я получаю следующий результат:

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

Так что я могу видеть, что mapEntry.getValue(), кажется, печатать целые числа, или, по крайней мере, цифры, которые я должен быть в состоянии бросить к целым числам.

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

Каков фактический тип 'obj'? –

+0

Я явно вставляю его в Entry , это то, что я использую, чтобы выполнять итерацию через entrySet, не будучи уверенным, есть ли лучшие способы, но это, казалось, хорошо работало, пока эта ошибка не появилась. – Jacco

+0

Что произойдет, если вы попытаетесь использовать Entry вместо этого? – pepan

ответ

1

Если вы попробуете это:

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 суперкласс обоих Integer и Long, он должен компилироваться.

+0

Ах, конечно! это решает мою проблему, я все еще не уверен, почему я получил свою ошибку в первую очередь, но я буду использовать это решение, пока не найду причину для странного (по-моему) поведения. – Jacco

Смежные вопросы