关于在Eclipse中生成的serialVersionUID

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

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

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

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

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

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

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

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

让我回答你的问题:

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

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

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

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

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

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

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

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