Serializableの注意点と対策
Javaに搭載されているオブジェクトの直列化機能のSerializableは、大変便利なのだが注意すべき点が沢山ある。
- クラスをSerializableにするときは、その基底クラスもSerializableにする。基底クラスがSerializableになってないかつデフォルトコンストラクタが無いとInvalidClassExceptionが発生する。
- メンバもSerializableにする。
- メンバを後から増やした時、Serializableオブジェクトを復元したときはそのメンバにはデフォルト値が入る。
- serialVersionUIDを設定しよう。設定しないとそのSerializableクラスのハッシュから計算されるのだが、そうするとメソッドを追加しただけで以前のクラスで出力したものと互換性が無くなりInvalidClassExceptionが発生する。