作为调试应用程序的一部分,我注意到它Field.getDeclaredFields()
返回了一些合成字段,包括serialVersionUID
扩展接口的类中的字段,尽管没有扩展Serializable
。
为什么编译器会添加这样的字段?
更新
实际上,还$VRc
创建了一个合成领域。
作为调试应用程序的一部分,我注意到它Field.getDeclaredFields()
返回了一些合成字段,包括serialVersionUID
扩展接口的类中的字段,尽管没有扩展Serializable
。
为什么编译器会添加这样的字段?
更新
实际上,还$VRc
创建了一个合成领域。
Java 编译器/运行时不会自动创建 serialVersionUID 字段。我怀疑您正在使用某种形式的字节码增强框架,该框架被指示在运行时或编译期间添加合成字段。
该$VRc
字段由 Emma 仪器框架生成,因此这将是至少一个合成字段的原因。
当属性设置为 true时,EmmaserialVersionUID
也会添加该字段。instr.do_suid_compensation
该字段对于 Java序列化是必不可少的。简而言之:它允许 JVM 发现被序列化的类(例如保存在磁盘上)后来被更改了,并且不能安全地反序列化回对象。
看看上面引用的文档中的版本控制serialVersionUID
章节,它解释了如何使用。
更新:刚刚注意到你的类没有实现Serializable
. 你确定没有一个超类或实现的接口没有扩展Serializable
?