Serializable javadoc によるとreadResolve()
、ストリームから読み取ったオブジェクトを置き換えることを目的としています。しかし、確かに (?) オブジェクトを置き換える必要はないので、次のように、一時的なフィールドを復元して元の参照を返すために使用しても問題ありません。
private Object readResolve() {
transientField = something;
return this;
}
を使用するのではなくreadObject()
:
private void readObject(ObjectInputStream s) {
s.defaultReadObject();
transientField = something;
}
一時的なフィールドを復元するために使用する場合、他のものよりも選択する理由はありますか? readResolve()
実際には、パラメーターを必要としないため、次のようなコンストラクターでオブジェクトを「通常どおり」構築するときにも簡単に使用できるため、私は傾いています。
class MyObject {
MyObject() {
readResolve();
}
...
}