質問

私は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の場合、ImmutableMapHashMapに変わります。 なぜそれはなぜこれを避けるために何ができるのか?

p.S。Intentを構築/受信した直後にデバッグ出力にこれを印刷する場合:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top