当我查看org.springframework.jdbc.datasource.DataSourceTransactionManager
的源代码时,我感到很困惑,为什么它会实现Serializable
但却没有serialVersionUID
?
[]
答案 0 :(得分:3)
建议声明它,但你可以省略声明它,默认机制会照顾你。
如果serializable类没有显式声明serialVersionUID,则序列化运行时将根据类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述。但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类详细信息高度敏感,这些详细信息可能因编译器实现而异,因此在反序列化期间可能会导致意外的InvalidClassExceptions。因此,为了保证跨不同java编译器实现的一致的serialVersionUID值,可序列化类必须声明显式的serialVersionUID值。