在Java中将Child类设置为Non Serializable

Gur*_*lki 17 java oop inheritance serialization

我有一个实现Serializable的类.现在我扩展了这个类,我希望这个扩展类不是Serializable.那怎么办呢?

例如.我有

class A implements Serializable.
Run Code Online (Sandbox Code Playgroud)

我有

class B extends A.
Run Code Online (Sandbox Code Playgroud)

但我希望B类是Non Serializable.

fin*_*nnw 16

您无法删除该界面,但可以在运行时阻止序列化:

class B extends A {
    private void writeObject(ObjectOutputStream oos) throws IOException {
        throw new NotSerializableException();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是Sun推荐的.请参阅http://java.sun.com/developer/technicalArticles/ALT/serialization/(标题为"Other Pointers"的段落.) (5认同)
  • 当有人检查您是否实现Serializable然后期望您实际可序列化时,这可能会导致许多问题. (3认同)

Jac*_*eow 14

正如其他人已经明确表示的那样,类的子Serializable类不可能是非类的Serializable.

如果你想要的是子类的属性不被序列化,一个选择是使它们都是瞬态的.

如果您需要更多(您不希望序列化超类字段),请覆盖writeObject(ObjectOutputStream)readObject(ObjectInputStream)按照此处所述 - https://web.archive.org/web/20120626144013/http://java.sun.com/开发商/ technicalArticles/ALT /系列化