2016-10-03 70 views
1

我試圖從JSONObject獲取一些值到HashMap中,但我一直在我for循環的最後一行獲取ClassCastException。嘗試將對象投射到MapEntry時出現ClassCastException

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

NumberIntegerLong的超類,它應該編譯罰款。

+0

啊,當然!這解決了我的問題,我仍然不確定爲什麼我首先得到了我的錯誤,但我會使用這個解決方案,直到我找到一個奇怪的原因(在我看來)的行爲。 – Jacco

相關問題