発火後忘失

FIRE AND FORGET

メンバーが全てSerializableでないとシリアライズ出来ない…わけではない

スタックオーバーフローサイトからひっぱてきたネタ です。

問題

下記のような、 Child 型(Serializable をimplementsしていない)をフィールドとして持つクラス Parentシリアライズできるでしょうか?

class Parent implements Serializable {

    private Child child;

    // ...
}

class Child {
}

答え

シリアライズしようとしている対象オブジェクトの状態によります。
常にシリアライズ不能というわけではありません。

最も単純な例で言うと、 child フィールドが null であればシリアライズ時に NotSerializableException はスローされません。
また別の例としては、 Child のサブクラスで Serializable な型のインスタンスがセットされている場合も例外はスローされません。

コードサンプル

実行可能サンプルコードをこちら に置いています。