gpt4 book ai didi

android - 尝试解包 ConcurrentHashMap 时出现 ClassCastException

转载 作者:行者123 更新时间:2023-11-29 20:53:36 25 4
gpt4 key购买 nike

我在使用 ConcurrentHashMap 和 androids parcel 机制时遇到了一些奇怪的行为。

我的情况是,我有一个 ConcurrentHashMap,它在某个时候被打包。我通过将其序列化为 Bundle 然后将 bundle 写入 parcel 来采用推荐的方式:

ConcurrentHashMap<String, CustomClass> concurrentMap = new ConcurrentHashMap<>();

...

@Override
public void writeToParcel ( Parcel dest, int flags ) {
Bundle map = new Bundle(1);
map.putSerializable("map", concurrentMap);
dest.writeBundle(map);
}

我稍后会像这样检索它:

public void readFromParcel ( Parcel in ) {

Bundle map = in.readBundle(CustomClass.class.getClassLoader());
concurrentMap = (ConcurrentHashMap<String, CustomClass>) map.getSerializable("map");
}

ClassCastException 在尝试将检索到的 Map 转换回 ConcurrentHashMap 时发生在最后一行。由于 HashMap 和 ConcurrentHashMap 都实现了 Serializable 接口(interface)并扩展了 AbstractMap 我不太明白这个问题。

有没有人也遇到过这个问题或者可以解释这个问题?

最佳答案

好的,所以这不是解释,但至少对我来说有一个快速修复方法。我不喜欢它,但它有效。

由于“getSerializable()”以某种方式将我的 ConcurrentHashMap 视为普通 HashMap,因此我暂时使用 HashMap 来获取我的 ConcurrentHashMap。

 HashMap<String, CustomClass > tempMap = (HashMap<String, CustomClass >) map.getSerializable("map");
concurrentMap = new ConcurrentHashMap<>(tempMap);

关于android - 尝试解包 ConcurrentHashMap 时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28408563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com