为什么设计用于继承的类很少应该实现Serializble接口?

Gee*_*eek 8 java inheritance serialization

根据Effective Java:

为继承而设计的类应该很少实现Serializable,接口应该很少扩展它.

这句话背后的原因是什么?换句话说,如果他们实现Serializable接口会出现什么问题?

zw3*_*324 7

同一项目中的下一句话说:

为继承而设计的类(第17项)应该很少实现Serializable,接口应该很少扩展它.违反此规则会给扩展类或实现接口的任何人带来沉重的负担.有时候违反规则是合适的.例如,如果类或接口主要存在于需要所有参与者实现Serializable的框架中,那么实现或扩展Serializable的类或接口就非常有意义.

由于我不希望Josh因侵犯版权而受到抨击(尽可能酷),我不会复制这个答案中的所有项目.我只想说这个问题的原因在本项目的其余部分进行了解释.

编辑:乔希列出了一些实施成本Serializable.如果接口/超类实现它,则会将成本强制转换为扩展类.

实现Serializable的一个主要成本是它降低了一旦发布后更改类的实现的灵活性....

...

实现Serializable的第二个成本是它增加了错误和安全漏洞的可能性....

实现Serializable的第三个成本是它增加了与发布新版本类相关的测试负担.


JB *_*zet 7

如果基类或接口实现Serializable,它会强制每个子类或实现,以履行超类或接口的约定,以确保子类或实现也是可序列化的.

例如,这可以防止任何实现添加非瞬态且不可序列化到其实现的字段.