HashMap#entrySet抛出ArrayStoreException

时间:2016-08-22 07:31:55

标签: java arrays hashmap

// channels is a HashMap<String,Channel>
for (Channel channel : channels.entrySet().toArray(new Channel[channels.entrySet().size()])) {
    // stuff
}

抛出ArrayStoreException。为什么呢?

2 个答案:

答案 0 :(得分:3)

entrySet()会返回Set<Map.Entry<K,V>>,因此您无法从中生成Channel数组。

您不需要创建数组来迭代Channel值。只需使用values()

for (Channel channel : channels.values()) {
    // stuff
}

答案 1 :(得分:1)

您是否查看了ArrayStoreException的文档?它说“抛出表示已经尝试将错误类型的对象存储到一个对象数组中。”因此显而易见(可能是:-)猜测是toArray()试图将某些内容存储到您的{ {1}}数组不是Channel。这是有道理的,因为条目集不是Channel个对象,而是Channel。那些不一样。