を拡張ArrayList<B>
array
する特定のクラスのオブジェクトがあるとします。インスタンス フィールドとフィールドがあります。を使用して.datファイルに保存するには、 (だけでなく!)実装が必要であることを知っています。ただし、ファイルからオブジェクトをロードするときに(を使用して)次のことがわかりました。B
A
B
bb
A
aa
array
ObjectOutputStream
B
ArrayList
Serializable
ObjectInputStream
arrayLoaded = (ArrayList<B>)myObjIn.readObject();
ロードされた配列は元の配列と同一ではありません: 特定のケースでarrayLoaded.get(0).bb
は、 は と同じ値を持ちますが、array
「arrayLoaded.get(0).aa
ゼロ化」されています。array
ファイルに保存されたときの値に関係なく、デフォルトの初期化値があります。しかし、この問題は もA
実装させることで解決されSerializable
ます。
私を悩ませているのは、このエラーが非常に微妙であることです: 例外も警告も (Eclipse では) も何もありません。これには理由がありますか、それとも単に Java 開発者による見落としですか? Serializable
オブジェクト IO ストリームを使用するたびに、それを受け入れて、階層内のどのクラスが実装されているかをよく考える必要がありますか?