日々精進

新しく学んだことを書き留めていきます

デシリアライズした時にtransientなフィールドを初期化する

transientなフィールドがデシリアライズした時にnullになるのを避けるには、readObjectメソッドの中でフィールドを初期化すればいい。

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    handler = new Handler();
}

readObjectはSerializableで定義されてないし、privateだけどデシリアライズ時に呼ばれる。 ランタイムがリフレクションを使って呼び出してるんだろうけど、Javaでこんなことやるなんて珍しいな。。

参考:

http://www.ne.jp/asahi/hishidama/home/tech/java/serial.html