10

作为调试应用程序的一部分,我注意到它Field.getDeclaredFields()返回了一些合成字段,包括serialVersionUID扩展接口的类中的字段,尽管没有扩展Serializable

为什么编译器会添加这样的字段?

更新

实际上,还$VRc创建了一个合成领域。

4

2 回答 2

11

Java 编译器/运行时不会自动创建 serialVersionUID 字段。我怀疑您正在使用某种形式的字节码增强框架,该框架被指示在运行时或编译期间添加合成字段。

$VRc字段由 Emma 仪器框架生成,因此这将是至少一个合成字段的原因。

当属性设置为 true时,EmmaserialVersionUID也会添加该字段。instr.do_suid_compensation

于 2011-09-12T14:42:01.357 回答
1

该字段对于 Java序列化是必不可少的。简而言之:它允许 JVM 发现被序列化的类(例如保存在磁盘上)后来被更改了,并且不能安全地反序列化回对象。

看看上面引用的文档中的版本控制serialVersionUID章节,它解释了如何使用。

更新:刚刚注意到你的类没有实现Serializable. 你确定没有一个超类或实现的接口没有扩展Serializable

于 2011-09-12T14:21:21.490 回答