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



我的web应用程序中有一个域类的层次结构,我想使其可序列化。所有域类都继承自一个抽象基类。我计划重写抽象基类中的readObject和writeObject。有没有一种方法可以让所有子类都服从于超级类进行序列化,这样子类就不会序列化自己的任何字段?

我使用的是FST序列化——如果以上在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应用程序中的域模型。我希望找到一种更简单的方法来处理这个问题,而不是在每个类的每个字段上指定"transient"。

背景:我正在序列化会话状态,以便允许保存到缓存服务器。我们的会话对象引用了域对象。与其保存整个域对象,我希望只保存域对象的一部分,并在会话对象被"反弹"到另一台服务器时重新构建它。

有没有一种方法可以让所有子类都服从于超级类进行序列化,这样子类就不会序列化自己的任何字段?

您可以像要求任何字段不序列化一样执行此操作:使子类中的所有字段为transient(或static)。

但这对子类来说是一个相当大的限制,也是程序员记住将所有字段设为transient的负担,而且在某种意义上,它使子类中的字段用途有限。请仔细考虑为什么要尝试停止序列化子类字段。