首页 文章

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

提问于
浏览
41

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

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

现在,我不在乎放在那里的 Value . 有关系吗?

2 回答

  • 12

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

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

    serialization spec有更多细节 .

  • 70

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

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

相关问题