以下代码抛出ClassCastException。有问题的集合确实持有ArrayList<String>
。
HashMap listing = (HashMap) data.get(s);
Collection<ArrayList<String>> collection = listing.entrySet();
int count = 0;
for ( ArrayList al : collection ) // exception occurs here
{
count += al.size();
}
我假设必须将其转换为Object和
a)我似乎无法弄清楚如何正确地将Object转换为ArrayList
b)我甚至不确定这是不是问题..
也许有人可以提供一些见解?
编辑:HashMap列表是HashMap<String, ArrayList<String>>
答案 0 :(得分:1)
您的代码在第二行有问题
listing.entrySet()
始终返回Set<MapEntry<Key,Value>>
即使set是集合的子类型,也不能将其转换为Collection<ArrayList<String>>
,因为泛型不同。
然后在HashMap(列表)中键和值的类型是什么?
答案 1 :(得分:1)
HashMap.entrySet()
返回Set<Map.Entry<K,V>>
。这与Collection<ArrayList<String>>
不兼容。
作为旁注,您的HashMap是原始类型,应该参数化。
答案 2 :(得分:0)
我认为发生异常的最可行的地方是以下行: HashMap listing =(HashMap)data.get(s);
你确定data.get(s)是假设返回hashmap。
此外,entrySet将返回与您的作业不兼容的不兼容的集合。