Joo*_*kka 7 java serialization transient
根据Serializable javadoc,readResolve()用于替换从流中读取的对象.(?),但你肯定不具备更换对象,因此,它是确定以使用它恢复瞬态字段,并返回原来的参考,像这样:
private Object readResolve() {
transientField = something;
return this;
}
Run Code Online (Sandbox Code Playgroud)
而不是使用readObject():
private void readObject(ObjectInputStream s) {
s.defaultReadObject();
transientField = something;
}
Run Code Online (Sandbox Code Playgroud)
当用于恢复瞬态场时,是否有任何理由选择其他?实际上我倾向于readResolve()因为它不需要参数,因此在构造"正常"时也可以很容易地使用它,在构造函数中如下:
class MyObject {
MyObject() {
readResolve();
}
...
}
Run Code Online (Sandbox Code Playgroud)
事实上,readResolve 的定义是为了让您更好地控制对象的反序列化方式。因此,您可以自由地做任何您想做的事情(包括为瞬态字段设置值)。
但是,我想您的瞬态字段设置为恒定值。在其他地方,这将是出现问题的明确信号:要么您的字段不是那么瞬态,要么您的数据模型依赖于错误的假设。
| 归档时间: |
|
| 查看次数: |
4368 次 |
| 最近记录: |