Java:对可序列化性的限制

标签 java serialization

我有一个类 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/

相关文章:

xml - 可以在 D 中获取变量名吗?

django - 如何在我的 HyeprlinkedModelSerializer 中使用自定义序列化器字段

java - 我应该将 AND 与两个 if 语句分开吗?

java - 键盘打开时 WebView 调整屏幕大小

java - Apache Spark 数据集。 foreach 与 Aerospike 客户端

jquery - 使用 jQuery 将表单序列化为对象数组

c# - Json.Net:将属性序列化/反序列化为一个值,而不是一个对象

java - 不显示 MotionEvent.ACTION_UP 或 MotionEvent.ACTION_CANCEL

Java:在另一个类中访问 XML 值作为新变量

java - 执行 JUnit 测试时如何使用 'java' 命令选项/参数