LinkedHashMap $ Entry无法强制转换为java.util.LinkedHashMap

时间:2014-01-19 10:41:10

标签: java list map classcastexception linkedhashmap

我将LinkedHashMap<String, LinkedHashMap<Date, Double>>打包到带有;

的列表中
List<LinkedHashMap<String, LinkedHashMap<Date, Double>>> list = new ArrayList(mainCodesMap.entrySet());

mainCodeMap的类型为Map<String, Map<Date, Double>>

事情是列表没有问题,但是,当我尝试在for循环中按索引获取list的元素时;

for (int i = 0; i < correMatrix.length; i++) {

    LinkedHashMap<String, LinkedHashMap<Date, Double>> entryRow = list.get(i);
    LinkedHashMap<Date, Double> entryRowData = (LinkedHashMap<Date, Double>) entryRow.values();
    ..
    ..
}

jvm抛出ClassCastException,表示;

java.lang.ClassCastException: java.util.LinkedHashMap$Entry cannot be cast to java.util.LinkedHashMap

1 个答案:

答案 0 :(得分:2)

List<LinkedHashMap<String, LinkedHashMap<Date, Double>>> list = new ArrayList(mainCodesMap.entrySet());

mainCodesMap.entrySet会返回Set<Map.Entry<...>>(不是字面...)。然后,您创建一个包含这些ArrayList的{​​{1}}。因为您使用的是原始类型Map.Entry(而不是ArrayList),编译器无法捕获此问题。

看起来你真的是这个意思:

ArrayList<something>

注意:List<LinkedHashMap<String, LinkedHashMap<Date, Double>>> list = new ArrayList<>(); list.add(mainCodesMap) 表示编译器会自动填写&lt;&gt ;.它并不适用于所有情况。