要初始化瞬态字段,最简单的解决方案是什么

Dav*_*rks 28 java serialization

class MyClass implements Serializable {
  transient int myTransient;
  //Other variables
}
Run Code Online (Sandbox Code Playgroud)

当我恢复这个类时,我想myTransient手动初始化,但我只想使用默认序列化.

如何init()在不重写整个序列化机制的情况下将方法注入到对象恢复过程中,因为它似乎Externalizable会让我这样做?

axt*_*avt 42

实施readObject()方法:

private void readObject(java.io.ObjectInputStream in)
    throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    myTransient = ...;
}
Run Code Online (Sandbox Code Playgroud)

来自javadoc:

在序列化和反序列化过程中需要特殊处理的类必须使用这些精确签名实现特殊方法:

private void readObject(java.io.ObjectInputStream in)抛出IOException,ClassNotFoundException;

readObject方法负责从流中读取并恢复类字段.它可以调用in.defaultReadObject来调用恢复对象的非静态和非瞬态字段的默认机制.defaultReadObject方法使用流中的信息来指定流中保存的对象的字段以及当前对象中相应命名的字段.这处理了类在演变为添加新字段时的情况.该方法不需要关注属于其超类或子类的状态.通过使用writeObject方法或使用DataOutput支持的原始数据类型的方法将各个字段写入ObjectOutputStream来保存状态.

也可以看看: