LinkedHashMap强制转换

时间:2015-07-23 14:19:55

标签: java casting linkedhashmap

我有以下代码

    // Gets title, headers and data
    String type = (String) responseMap.get("type");
    String language = (String) responseMap.get("language");
    String template = (String) responseMap.get("template");
    String title = (String) responseMap.get("title");
    List<Map> header = (List<Map>) responseMap.get("headers");
    Object[] rows = ((List<List>) responseMap.get("data")).toArray();

    List list = new ArrayList();
    Bean line = null;
    LinkedHashMap<String, Object> hmap = null;

    int j, i;

    for (j = 0; j < rows.length; j++) {
        hmap = (LinkedHashMap<String, Object>) rows[j];
        line = new Bean();

        for (i = 1; i < headers.length; i++) {
            line.choosefield(i, headers, hmap);
        }
        list.add(line);
    }

在hmap =(LinkedHashMap)行[j];日食说

 java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.LinkedHashMap

我不明白这个错误,因为我之前在另一个类中使用过这段代码(有警告但有效)。

public String generateReport(String[] headers, Object[] data,
        String language, String template, String title, String type)
        throws JRException, SQLException, IOException {

    int j, i;

    for (j = 0; j < data.length; j++) {
        hmap = (LinkedHashMap<String, Object>) data[j];
        line = new Bean();

        for (i = 1; i < headers.length; i++) {
            line.choosefield(i, headers, hmap);
        }
        list.add(line);
    }

为什么我现在不能施展? 使用Windows和JDK1.6

1 个答案:

答案 0 :(得分:1)

在第二种情况下hmap = (LinkedHashMap<String, Object>) data[j];,它起作用,因为data[j]包含LinkedHashMap<String, Object>。为了验证您可以在第二个代码段中将LinkedHashMap<String, Object>以外的东西放在Object []数据中。你可能会得到相同的java.lang.ClassCastException

在第一个代码段中,您可以在执行盲目类型转换之前执行instanceOf检查。这有助于您避免使用此java.lang.ClassCastException