【问题标题】:LinkedHashMap$Entry cannot be cast to java.util.LinkedHashMapLinkedHashMap$Entry 不能转换为 java.util.LinkedHashMap
【发布时间】:2014-02-08 12:59:41
【问题描述】:

我将LinkedHashMap<String, LinkedHashMap<Date, Double>> 包装到一个列表中;

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

mainCodeMapMap&lt;String, Map&lt;Date, Double&gt;&gt; 的类型

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

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 throws ClassCastException 上面写着;

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

【问题讨论】:

  • 我想我对某些事情感到困惑,因为我认为列表的每个元素也是LinkedHashMap&lt;String, LinkedHashMap&lt;Date, Double&gt;&gt;
  • values 会返回一个 LinkedHashMap 的集合,而不是一个。
  • entryRow.values() 返回 Collection&lt;LinkedHashMap&lt;...&gt;&gt;,而不是 LinkedHashMap...
  • 好的,非常感谢我解决了这个问题。 :) 如果你们中的一个人可以写下你的答案,我会接受它

标签: java list map classcastexception linkedhashmap


【解决方案1】:
List<LinkedHashMap<String, LinkedHashMap<Date, Double>>> list = new ArrayList(mainCodesMap.entrySet());

mainCodesMap.entrySet 返回Set&lt;Map.Entry&lt;...&gt;&gt;(不是字面意义上的...)。然后创建一个包含这些Map.Entrys 的ArrayList。因为您使用的是原始类型 ArrayList(而不是 ArrayList&lt;something&gt;),所以编译器无法捕捉到这个问题。

看起来你的意思是这样的:

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

注意:ArrayList&lt;&gt; 表示编译器会自动填写。并非在所有情况下都有效。

【讨论】:

  • 实际上,我更改了几行,例如List&lt;Entry&lt;String, LinkedHashMap&lt;Date, Double&gt;&gt;&gt; list = new ArrayList(mainCodesMap.entrySet());,因此我只在列表中添加了我想要的条目。但是,“它在所有情况下都不起作用”是什么意思。它取决于Java版本吗?无论如何感谢您的回复
猜你喜欢
  • 2021-04-22
  • 2015-04-30
  • 2022-01-14
  • 2020-09-07
  • 1970-01-01
  • 2021-03-03
  • 2021-02-27
  • 2018-08-07
相关资源
最近更新 更多