私はこのリストを持っています
LinkedList<ASD> list = new LinkedList<ASD>();
次に、ASDを拡張するいくつかのオブジェクトを追加します
BSD bsd = new BSD(); // BSD extends ASD
list.add(bsd);
リストをシリアル化します。
bsd要素をASDではなくBSDとしてシリアル化および逆シリアル化するにはどうすればよいですか?
私はこのリストを持っています
LinkedList<ASD> list = new LinkedList<ASD>();
次に、ASDを拡張するいくつかのオブジェクトを追加します
BSD bsd = new BSD(); // BSD extends ASD
list.add(bsd);
リストをシリアル化します。
bsd要素をASDではなくBSDとしてシリアル化および逆シリアル化するにはどうすればよいですか?
問題ありません。シリアル化するすべてのオブジェクトは、を実装するクラスのインスタンスである必要がありますSerializable
。LinkedList
それをします。ASD
またはBSD
(あなたの場合は関係ありません)のいずれかを宣言して、実装Serializable
して試してください。すべてが機能するはずです。
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>
) デシリアライズできるということです。ただし、新しく指定されたジェネリック型にキャストできないリストの要素にアクセスしようとすると、後で例外がスローされる可能性があります。
最後に、私はこれが実行可能であると言っているだけであり、それが良い習慣であると言っているわけではありません:)