为什么有些API实现了Serializable接口但没有声明serialVersionUID?

时间:2017-07-05 12:49:13

标签: java

当我查看org.springframework.jdbc.datasource.DataSourceTransactionManager的源代码时,我感到很困惑,为什么它会实现Serializable但却没有serialVersionUID

[serializable]

1 个答案:

答案 0 :(得分:3)

建议声明它,但你可以省略声明它,默认机制会照顾你。

  

如果serializable类没有显式声明serialVersionUID,则序列化运行时将根据类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述。但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类详细信息高度敏感,这些详细信息可能因编译器实现而异,因此在反序列化期间可能会导致意外的InvalidClassExceptions。因此,为了保证跨不同java编译器实现的一致的serialVersionUID值,可序列化类必须声明显式的serialVersionUID值。