根据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();
}
...
}