我的Web应用程序中有一个域类的层次结构,我想使其可序列化。所有域类都继承自抽象基类。我计划在抽象基类中重写readObject和writeObject。有没有办法让所有子类都遵从超类进行序列化,这样子类不会序列化任何自己的字段?
我正在使用FST Serialization - 如果在Java中无法实现上述目标,那么有没有办法,例如,指定一个"序列化策略"对于某种类型的物体?
public abstract class Base implements Serializable {
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException {
...
}
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException {
...
}
}
public class Person extends Base {
// I don't want Person class to do anything for serialization
}
更新:我有超过一百个子类,每个子类有几个字段。这些类构成了我的Web应用程序中的域模型。我希望找到一种更简单的方法来处理这个,而不是指定瞬态'在每个班级的每个领域。
背景:我正在序列化会话状态,以便保存到缓存服务器。我们的会话对象引用了域对象。我希望只保存部分域对象,而不是保存整个域对象,并在会话对象被弹回"到另一台服务器。
答案 0 :(得分:1)
有没有办法让所有子类都遵从超类进行序列化,以便子类不会序列化任何自己的字段?
您可以按照要求任何字段不要序列化的方式执行此操作:创建子类transient
(或static
)中的所有字段。
但是这对子类来说是一个很大的限制,并且程序员要记住要创建所有字段transient
,这在某种意义上它会使得子类中的字段的使用受到限制。仔细考虑为什么要尝试停止序列化的子类字段。