根据有效的Java:
为继承而设计的类应该很少实现 Serializable,接口应该很少扩展它。
这种说法背后的原因是什么?换句话说,如果他们确实实现了 Serializable 接口,会出现什么问题?
根据有效的Java:
为继承而设计的类应该很少实现 Serializable,接口应该很少扩展它。
这种说法背后的原因是什么?换句话说,如果他们确实实现了 Serializable 接口,会出现什么问题?
同一项中的下一句说:
为继承设计的类(第 17 条)应该很少实现 Serializable,接口应该很少扩展它。违反此规则会给扩展类或实现接口的任何人带来重大负担。有时违反规则是适当的。例如,如果一个类或接口的存在主要是为了参与一个要求所有参与者都实现 Serializable 的框架,那么类或接口实现或扩展 Serializable 是非常有意义的。
由于我不希望 Josh 因侵犯版权而成为我的尾巴(尽管这可能很酷),所以我不会复制此答案中的所有项目。足以说明这一点的原因在该项目的其余部分进行了解释。
编辑:乔希列出了一些实施成本Serializable
。如果一个接口/超类实现它,成本将被强加给扩展类。
实现 Serializable 的一个主要成本是它降低了在类发布后更改其实现的灵活性。...
...
实现 Serializable 的第二个成本是它增加了错误和安全漏洞的可能性。...
实现 Serializable 的第三个成本是它增加了与发布类的新版本相关的测试负担。
如果基类或接口实现了 Serializable,它会强制每个子类或实现履行超类或接口的约定,以确保子类或实现也是可序列化的。
例如,这可以防止任何实现向其实现添加非瞬态且不可序列化的字段。
可序列化类的所有子类型本身都是可序列化的,如此处所指定。因此,如果您要序列化为继承而设计的类,您应该知道是否需要序列化所有子类。否则,您只能序列化所需的子类。