我有以下代码
// 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
答案 0 :(得分:1)
在第二种情况下hmap = (LinkedHashMap<String, Object>) data[j];
,它起作用,因为data[j]
包含LinkedHashMap<String, Object>
。为了验证您可以在第二个代码段中将LinkedHashMap<String, Object>
以外的东西放在Object []数据中。你可能会得到相同的java.lang.ClassCastException
。
在第一个代码段中,您可以在执行盲目类型转换之前执行instanceOf
检查。这有助于您避免使用此java.lang.ClassCastException
。