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!
}
2 番目のスニペットのコードが実行されると、次の例外がスローされます。
java.lang.ClassCastException: java.util.HashMap を com.google.common.collect.ImmutableMap にキャストできません
したがって、ある時点でImmutableMapに変わりHashMapます。それはなぜなのか、これを回避するにはどうすればよいのでしょうか。
PSインテントを構築/受信した直後にこれをデバッグ出力に出力すると:
intent.getSerializableExtra("extra1").getClass().getSimpleName());
// ^^^^ prints SingletonImmutableBiMap in Activity1
// ^^^^ prints HashMap in Activity2