尝试将Object强制转换为MapEntry时出现ClassCastException

时间:2016-10-03 12:30:39

标签: java json

我正在尝试从JSONObject中获取一些值到HashMap中,但是我在for循环的最后一行继续得到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());
        }

1 个答案:

答案 0 :(得分: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的超类,它应该编译得很好。