不知道如何避免这种ClassCastException

时间:2011-03-18 05:03:28

标签: java

以下代码抛出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>>

3 个答案:

答案 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将返回与您的作业不兼容的不兼容的集合。