繁体   English   中英

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

[英]Java - Handle serialization only in superclass

我的 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 (或static )。

但这对子类来说是一个相当大的限制,也是程序员的负担,要记住让所有字段都是transient ,从某种意义上说,它使子类中的字段使用受限。 仔细考虑为什么要阻止子类字段被序列化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM