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