【发布时间】:2013-04-02 09:10:45
【问题描述】:
如果超类实现Serializable接口,如何停止子类的序列化?
【问题讨论】:
标签: java serialization
如果超类实现Serializable接口,如何停止子类的序列化?
【问题讨论】:
标签: java serialization
您可以使用writeObject() 方法来实现。
您可以使用writeObject 自定义对象的序列化行为,如果您不允许Class 的序列化,则覆盖此方法并引发错误。
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException {
throw new IOException('No serialization not allowed')
}
【讨论】:
实现readObject 和writeObject 方法以无条件地抛出IOException。丑陋但有效。
不幸的是,您无法阻止子类实现其自己的 readObject 和 writeObject 方法以恢复“可串行化”...除非您将子类声明为 final。
当然,这是有问题的 OO 设计(它违反了Liskov Substitution Principle),但如果你真的需要这样做......
【讨论】:
使所有属性瞬态:)
【讨论】: