gpt4 book ai didi

android - ImmutableMap 在通过 Intent 时变成了 HashMap

转载 作者:行者123 更新时间:2023-11-29 01:41:57 27 4
gpt4 key购买 nike

我在 Android 项目中使用 Guava 集合。刚刚注意到以下行为:

Activity1 中:

Intent i = new Intent(this, Activity2.class);
i.putExtra("extra1", ImmutableMap.of("key1", "value1"));
startActivity(i);

Activity2中:

Activity2::onCreate(...) {
ImmutableMap<String,String> map =
(ImmutableMap<String,String>)getIntent()
.getSerializableExtra("extra1");
// above line throws ClassCastException!
}

一旦执行,第二个 fragment 中的代码将抛出此异常:

java.lang.ClassCastException: java.util.HashMap cannot be cast to com.google.common.collect.ImmutableMap

所以在某些时候 ImmutableMap 变成了 HashMap。我想知道为什么会这样,我可以做些什么来避免这种情况?

附言如果我在构建/接收 Intent 后立即打印它以调试输出:

intent.getSerializableExtra("extra1").getClass().getSimpleName());
// ^^^^ prints SingletonImmutableBiMap in Activity1
// ^^^^ prints HashMap in Activity2

最佳答案

Intent extra 作为 parcels 传递,这是一种高性能的 IPC 传输(想想高性能序列化)。打包后,您的 ImmutableMap 为 written like all Map implementations , 因此后来是 read as a HashMap .

我认为您无法避免这种情况。如果您真的想使用 ImmutableMap,则需要使用 ImmutableMap.copyOf() 将 HashMap 的内容复制到 ImmutableMap 中。

Activity2::onCreate(...) {
ImmutableMap<String,String> map = ImmutableMap.copyOf(
(Map<String,String>)getIntent().getSerializableExtra("extra1")
);
}

关于android - ImmutableMap 在通过 Intent 时变成了 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038828/

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