【发布时间】:2014-06-04 13:30:45
【问题描述】:
我在一个 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!
}
一旦执行,第二个 sn-p 中的代码就会抛出这个异常:
java.lang.ClassCastException: java.util.HashMap 无法转换为 com.google.common.collect.ImmutableMap
所以在某些时候ImmutableMap 变成了HashMap。
我想知道为什么会这样,我该怎么做才能避免这种情况?
附:如果我在构建/接收 Intent 后立即打印它以调试输出:
intent.getSerializableExtra("extra1").getClass().getSimpleName());
// ^^^^ prints SingletonImmutableBiMap in Activity1
// ^^^^ prints HashMap in Activity2
【问题讨论】:
-
我猜这是因为 ImmutableMap 有它自己的序列化。 HashMap 似乎是在 ImmutableMap 中导入的,但我看不到它在哪里使用。不确定它将如何解析为 HashMap。我会继续挖掘。
标签: android guava android-guava