ImmutableMapは、Intentを通過するとハッシュマップに変わります
-
21-12-2019 - |
質問
私は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
SOの場合、ImmutableMap
がHashMap
に変わります。
なぜそれはなぜこれを避けるために何ができるのか?
p.S。Intentを構築/受信した直後にデバッグ出力にこれを印刷する場合:
intent.getSerializableExtra("extra1").getClass().getSimpleName());
// ^^^^ prints SingletonImmutableBiMap in Activity1
// ^^^^ prints HashMap in Activity2
. 所属していません StackOverflow