0

私はこのリストを持っています

LinkedList<ASD> list = new LinkedList<ASD>();

次に、ASDを拡張するいくつかのオブジェクトを追加します

BSD bsd = new BSD(); // BSD extends ASD
list.add(bsd);

リストをシリアル化します。

bsd要素をASDではなくBSDとしてシリアル化および逆シリアル化するにはどうすればよいですか?

4

2 に答える 2

2

問題ありません。シリアル化するすべてのオブジェクトは、を実装するクラスのインスタンスである必要がありますSerializableLinkedListそれをします。ASDまたはBSD(あなたの場合は関係ありません)のいずれかを宣言して、実装Serializableして試してください。すべてが機能するはずです。

于 2013-02-05T12:44:12.410 に答える
0

AlexR が指摘したように、すべて問題ありません。

class ASD implements Serializable {
  private static final long serialVersionUID = 1L;
}

class BSD extends ASD {
  private static final long serialVersionUID = 1L;
}

LinkedList<ASD> list = new LinkedList<ASD>();
list.add(new BSD())

ここで、listシリアル化し、後で逆シリアル化すると、その要素は正しい型になりますBSD

さらに、シリアル化中にジェネリック型引数 (<ASD>物) は保存されません。listシリアライゼーション手順は、それがオブジェクトであることだけを覚えていLinkedListます。これが意味することは、タイプのオブジェクトをLinkedList<ASD>シリアライズしてから、それを as LinkedList<BSD>(または eg としてLinkedList<Integer>) デシリアライズできるということです。ただし、新しく指定されたジェネリック型にキャストできないリストの要素にアクセスしようとすると、後で例外がスローされる可能性があります。

最後に、私はこれが実行可能であると言っているだけであり、それが良い習慣であると言っているわけではありません:)

于 2013-02-05T13:21:10.780 に答える