Java - 仅在超类中处理序列化

时间:2016-05-26 19:05:33

标签: java serialization

我的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应用程序中的域模型。我希望找到一种更简单的方法来处理这个,而不是指定瞬态'在每个班级的每个领域。

背景:我正在序列化会话状态,以便保存到缓存服务器。我们的会话对象引用了域对象。我希望只保存部分域对象,而不是保存整个域对象,并在会话对象被弹回"到另一台服务器。

1 个答案:

答案 0 :(得分:1)

  

有没有办法让所有子类都遵从超类进行序列化,以便子类不会序列化任何自己的字段?

您可以按照要求任何字段不要序列化的方式执行此操作:创建子类transient(或static)中的所有字段。

但是这对子类来说是一个很大的限制,并且程序员要记住要创建所有字段transient,这在某种意义上它会使得子类中的字段的使用受到限制。仔细考虑为什么要尝试停止序列化的子类字段。