根据有效的Java:为什么为继承设计的类应该很少实现Serializble接口?
类设计继承应该很少实现Serializable, 和接口应该很少对它进行扩展。
这句话背后的原因是什么?换句话说,如果他们实现Serializable接口,会出现什么问题?
根据有效的Java:为什么为继承设计的类应该很少实现Serializble接口?
类设计继承应该很少实现Serializable, 和接口应该很少对它进行扩展。
这句话背后的原因是什么?换句话说,如果他们实现Serializable接口,会出现什么问题?
在同一项目下一句说的:
类设计继承(第17项)应该很少实现Serializable和接口应该很少对它进行扩展。 违反这条规则给扩展类或实现接口的任何人造成了沉重的负担。有时违反规则是适当的。例如,如果一个类或接口主要存在于要求所有参与者实现Serializable的框架中,那么对于类或接口来说,实现或扩展Serializable是非常有意义的。
因为我不希望Josh在我的尾巴上侵犯版权(尽可能酷),所以我不会复制这个答案中的所有项目。完全可以说这个问题的推理在本文的其余部分中有解释。
编辑:约什列出了实施Serializable
的一些成本。如果一个接口/超类实现它,成本将被强制到扩展类。
实现Serializable接口的主要成本是它降低了 灵活地改变一个类的实现,一旦它已被释放 。 ...
...
实现Serializable接口的第二个成本是增加了错误和安全漏洞的可能性 。 ...
实现Serializable的第三个代价是它增加了与释放新版本类相关的测试负担。
序列化类的所有子类型本身可序列化的规定here。所以如果你要设计序列继承一个类你应该知道的所有子类是否需要为serialized.Otherwise可以序列所需子只有类。
我的记忆可能会生锈,但如果我是对的,乔希布洛赫解释了同一项目中的推理。 –
@ZiyaoWei不,他没有。 – Geek
我想这意味着所有继承自这个类的类都可以被序列化(这并不一定是真的) –