要初始化瞬态字段,最简单的解决方案是什么
class MyClass implements Serializable { transient int myTransient; //Other variables }
当我恢复这个类时,我想手动初始化myTransient
,否则我只想使用默认的序列化。
如何在不重写整个序列化机制的情况下将init()
方法注入到对象恢复过程中,因为看起来像Externalizable
会让我这么做?
实现readObject()
方法:
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); myTransient = ...; }
来自javadoc:
在序列化和反序列化过程中需要特殊处理的类必须使用这些精确签名实现特殊方法:
private void readObject(java.io.ObjectInputStream in)抛出IOException,ClassNotFoundException;
readObject方法负责从流中读取并恢复类字段。 它可以调用in.defaultReadObject来调用恢复对象的非静态和非瞬态字段的默认机制。 defaultReadObject方法使用流中的信息来指定流中保存的对象的字段以及当前对象中相应命名的字段。 这处理了类在演变为添加新字段时的情况。 该方法不需要关注属于其超类或子类的状态。 通过使用writeObject方法或使用DataOutput支持的原始数据类型的方法将各个字段写入ObjectOutputStream来保存状态。
也可以看看:
-
Serializable
javadoc