在Java中扩展Serializable类时,我选择serialVersionUID是否重要?

时间:2009-03-03 10:06:21

标签: java serialization

我正在扩展一个实现Serializable interface的类(ArrayBlockingQueue)。 Sun的文档(和我的IDE)告诉我,我应该设置这个值以防止恶作剧:

  

但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类详细信息高度敏感,这些详细信息可能因编译器实现而异,因此在反序列化期间可能会导致意外的InvalidClassExceptions。

现在,我不在乎放在那里的价值。这有关系吗?

2 个答案:

答案 0 :(得分:70)

否 - 只要您在正确的时间更改它(即当您进行影响序列化的更改,例如删除字段时),您使用的值无关紧要。

为简单起见,我建议从0开始,每次需要时将其增加1。

serialization spec有更多详情。

答案 1 :(得分:12)

对serialVersionUID唯一重要的是该类的二进制兼容的序列化版本具有相同的serialVersionUID;也就是说,如果你没有对课程的序列化形式进行任何重大修改,那就没关系了。

当然,更好的选择是使用序列化提供给您的高级选项,以便永远不会有任何重大更改。我建议阅读readResolve()等。有效的Java详细介绍了该领域的一些棘手问题。