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

4
当我查看org.springframework.jdbc.datasource.DataSourceTransactionManager的源代码时,我感到困惑,为什么它实现了Serializable,但其中没有给出serialVersionUID的值?

6
因为Spring的作者选择不定义serialVersionUID,所以在进行序列化时它并不是必需的。但是,如果你计划在演化类时支持向后的序列化兼容性,则需要它。 - JB Nizet
1个回答

3

建议声明它,但是您可以省略声明,因为默认机制会为您处理它。

如果一个可序列化类没有明确声明serialVersionUID,则序列化运行时将基于该类的各个方面计算出默认的serialVersionUID值,如Java(TM)对象序列化规范中所述。然而,强烈建议所有可序列化的类都显式声明serialVersionUID值,因为默认的serialVersionUID计算对编译器实现可能因类细节而异,从而可能导致意外的InvalidClassExceptions在反序列化期间。因此,为了保证在不同的java编译器实现中具有一致的serialVersionUID值,可序列化的类必须声明一个明确的serialVersionUID值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接