我有一个类 A,它实现了可序列化接口(interface)。有两个子类 B 和 C 扩展了 A。我希望 B 类不可序列化?我怎样才能实现它?
最佳答案
根据定义,如果 Java 类实现了 Serialized
接口(interface),那么它就是可序列化的,可序列化的类不能有不可序列化的子类。
因此,在继承树上的类上实现该接口(interface)或在接口(interface)中扩展它之前,应该三思而后行。我知道一个项目,其中顶级 IIdentABLE
接口(interface)扩展了 Serializable
,强制所有域类可序列化。不幸的是(对于想要使用该功能的同事),其中许多在实践中是不可序列化的,因为:
您可以通过以下几种方式在运行时阻止序列化:
- 通过添加未实现
Serialized
的类型的成员变量(如 jefflub 的答案所示),或 - 通过实现方法
private void writeObject(java.io.ObjectOutputStream out) throws IOException
(具有确切的签名)并在该方法中抛出IOException
,<
任何序列化类的尝试都会引发异常。
关于Java:对可序列化性的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371433/