Согласно Сериализуемый javadoc, readResolve()
предназначен для замены объекта, считанного из потока. Но, конечно (?) У вас нет для замены объекта, поэтому можно использовать его для восстановления переходных полей и возврата исходной ссылки, например:
private Object readResolve() {
transientField = something;
return this;
}
вместо использования readObject()
:
private void readObject(ObjectInputStream s) {
s.defaultReadObject();
transientField = something;
}
Есть ли какая-либо причина выбирать одно из другого, когда оно используется только для восстановления переходных полей? На самом деле я склоняюсь к readResolve()
, потому что он не нуждается в параметрах, и поэтому его можно легко использовать и при построении объектов «нормально», в конструкторе, например:
class MyObject {
MyObject() {
readResolve();
}
...
}