关于在Eclipse中生成的serialVersionUID

时间:2012-04-30 19:08:24

标签: java eclipse serialversionuid

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

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

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

4 个答案:

答案 0 :(得分:17)

不,在两种情况下都不会造成任何问题:

  • 您可以逐步手动指定
  • 你可以让Eclipse为它们分配随机生成的值
  • 你可以为不同的班级保留所有1L

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

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

您希望为同一个类创建不同序列号的情况是您更新类时要禁止使用先前声明的SAME类对其进行序列化。

答案 1 :(得分:2)

让我向后回答你的问题:

添加生成的串行版本ID ...是否安全?答:是的

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

串行生成串行ID:答案是没有内置机制来执行此操作。你问这个问题的事实让我相信你不知道serialVersionUID是什么。即使你已经读过它的内容,你也应该再读一遍。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

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

检查http://java.sun.com/developer/technicalArticles/Programming/serialization/的详细信息(向下滚动到“版本控制”)