11

有没有办法在 Eclipse 中串行生成 serialVersionUID?串行我的意思是,如果一个可序列化类的serialVersionUID = 1L,那么当我生成另一个类的serialVersionUID 时,这将是serialVersionUID = 2L。

如果我手动指定 1L、2L、3L 等,这会产生任何问题吗?

Eclipse 提供了一个选项来选择“添加生成的序列版本 ID”,这个选项可以安全选择吗?

4

4 回答 4

17

不,它不会在您的两种情况下产生任何问题:

  • 您可以手动增量指定它
  • 您可以让 Eclipse 为它们分配随机生成的值
  • 您可以将它们全部保留1L用于不同的课程

序列 UID 的目的是禁止在不同版本中对相同的类进行序列化和反序列化,尤其是在没有前向兼容性的情况下(例如,新版本的类不能通过以前的定义进行序列化/反序列化)。

这种情况很少发生,尤其是在处理您自己的项目时,这些项目不属于依赖序列化的大型框架的一部分。所以你可以安全地做任何你想做的事。

您希望同一类具有不同序列的情况是,当您正在更新一个类并且您希望使用 SAME 类的先前声明来禁止它的序列化时。

于 2012-04-30T19:13:18.697 回答
2

让我反过来回答你的问题:

添加生成的序列号版本号...安全吗?答案:是的

如果您手动指定 1L、2L、3L,那就是个问题:没有比将它们全部设为 1 或任何其他数字更多的问题

串行生成序列 ID:答案是没有内置机制来执行此操作。您问这个问题的事实使我相信您不知道 serialVersionUID 的用途。即使您已经阅读了它的作用,您也应该再次阅读它。

于 2012-04-30T19:13:34.190 回答
2

你根本不应该这样做。这个想法是serialVersionUID通过遵守对象序列化规范的对象版本控制部分中的规则,在类的演变过程中尽可能长时间地保持常量。

你的“编程风格”与它无关。这是将事物用于其设计目的的问题。它不是为您使用它的目的而设计的。源代码控制系统可以为您做到这一点。

于 2012-05-01T01:05:13.677 回答
1

java序列化支持所有类都具有相同的serialVersionUID

这用于版本控制,以便旧定义的序列化对象与新版本不兼容

查看http://java.sun.com/developer/technicalArticles/Programming/serialization/了解详情(向下滚动到“版本控制”)

于 2012-04-30T19:12:55.767 回答