【发布时间】:2013-05-26 21:47:45
【问题描述】:
如果Serializable 接口只是一个Marker-Interface 用于传递某种关于Java 类的元数据——我有点困惑:
看完java的序列化算法的流程(元数据自下而上,然后实际实例数据自上而下),实在搞不懂有哪些数据不能通过那个处理算法。
简而言之:
- 哪些数据可能导致
NotSerializableException? - 我怎么知道我不应该为我的班级添加
implements Serializable子句?
【问题讨论】:
-
TL;DR:所以我认为我在这里从几个答案的组合中读到的是基本的 Java 类型是可序列化的,但如果你在一个类中有它们,那么那个类(或一个其父类)需要可序列化。如果任何类(或父类)没有明确标记为 Serializable,那么它不是。如果您将一个类标记为可序列化,那么它的所有成员都需要为自己遵循这些相同的规则。
-
然而,如果一个类被标记为 Serializable,那么任何 member 类实例(该 Serializable 类的)包含 only Serializable作为其成员的类型,包括仅包含可序列化的其他类等,也将是可序列化的,无需显式声明。这是我从自己的代码中收集的。
-
@Andrew 参考关于“成员类”的最后一条注释 - 每个应该(并且可以......)序列化的类 - 都需要标记为可序列化。任何其他选择至少是一种非常糟糕的做法。
标签: java serialization marker-interfaces