繁体   English   中英

与完全不可序列化祖先的可序列化子级相比,在完全可序列化的层次结构中序列化类的好处/缺点是什么?

[英]What are the benefits/drawbacks to serializing a class in a fully serializable hierarchy, vs. Serializable child of non-serializable ancestry?

那是

(1)

class A 
B extends A
C extends B
D extends C 
E extends D implements Serializable

(2)

A implements Serializable
B extends A
C extends B
D extends C 
E extends D

(1)在第一种情况下,序列化E将导致保存E的状态,并且在反序列化时通过调用D的默认构造函数来重建A到D。

(2)在第二种情况下,对E进行序列化将保存A到E的状态,并且在反序列化时无需进行任何重构(因为由于从可序列化的基类继承而使得所有内容都可以序列化)。

第一种方法有任何危险吗? 在某些情况下,通过第一种方法节省在序列化/反序列化过程中传输的数据是否足以使其成为首选方法,还是总是最好地完全序列化类层次结构?

提前致谢。

通常不认为在超类中实现Serializable的最佳实践,尤其是在将其用作导出API的层次结构中的基类的情况下(但是, 应将基类设计为预期实现Serializable的子类;请参见下文)。 。 原因是,这会强制API的客户端使子类可序列化,无论它们对它们是否有用(Essential Java,第二版)。

该规则的例外情况是基类本身参与了需要Serializable的框架。

无论如何,如果子类可序列化而其父类不可序列化,则可能会出现问题。 在这种情况下,子类负责序列化和反序列化其父级的状态。 缺点是:

  • 父字段不能为final字段
  • 如果子类无法访问父级字段,则可能无法获得正确的序列化表示形式
  • 本身未实现Serializable父类需要无参数构造函数

关于在Essential Java(第二版)中序列化Java实例的陷阱和建议的实践,进行了精彩的讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM