【问题标题】:how to stop serialization of subclass? [duplicate]如何停止子类的序列化? [复制]
【发布时间】:2013-04-02 09:10:45
【问题描述】:

如果超类实现Serializable接口,如何停止子类的序列化?

【问题讨论】:

    标签: java serialization


    【解决方案1】:

    您可以使用writeObject() 方法来实现。

    您可以使用writeObject 自定义对象的序列化行为,如果您不允许Class 的序列化,则覆盖此方法并引发错误。

    private void writeObject(java.io.ObjectOutputStream stream)
            throws IOException {
        throw new IOException('No serialization not allowed')
    }
    

    【讨论】:

    • 完美答案!
    【解决方案2】:

    实现readObjectwriteObject 方法以无条件地抛出IOException。丑陋但有效。

    不幸的是,您无法阻止子类实现其自己的 readObjectwriteObject 方法以恢复“可串行化”...除非您将子类声明为 final

    当然,这是有问题的 OO 设计(它违反了Liskov Substitution Principle),但如果你真的需要这样做......

    【讨论】:

    • +1 提到里氏替换原则
    【解决方案3】:

    使所有属性瞬态:)

    【讨论】:

    • 类仍然是可序列化的
    • 当一个类的所有属性都无法持久化时,你会怎么做?
    • 父母的属性是什么?
    • 我的错,忽略了这个事实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多