13

编辑:随机我的意思是一个大的计算数字,对我们作为开发人员来说没有语义意义

在实现 Serializable 接口时,它的最佳实践是指定串行版本 UID 非常重要。在许多地方,我经常看到使用随机数。例如

有效的 Java(第 2 版)第 312 页:

private static final long serialVersionUID = 234098243823485285L;

来自 Java 6 中的 String 类:

private static final long serialVersionUID = -6849794470754667710L;

来自 Java 6 中的 ArrayList 类:

private static final long serialVersionUID = 8683452581122892189L;

等等。甚至 eclipse 也提供了生成这些随机数的选项(尽管主要的默认值似乎是生成一个 serialVersionUID 1L

为什么要使用随机数?当它像任何明智的修订控制一样发生变化时,从 1L 开始并增加到 2L 不是更有意义吗?我能想到的唯一一次使用看似随机的数字是,如果您没有指定一个 serialVersionUID 开头并且现在想要这样做(它将您与运行时自动生成的版本联系起来以提供向后兼容性支持)。

4

2 回答 2

12

这些“随机”数字可能是按照Java 对象序列化规范以“当前”形式自动为类生成的数字......其中“当前”是“serialVersionUID第一次声明时的当前”。

这将允许以前序列化的数据仍然被反序列化- 同时向前更明确地声明未来的重大变化。

于 2013-02-20T23:14:16.797 回答
4

它们几乎肯定不是随机数,而是serialver工具的输出。

于 2013-02-20T23:17:05.317 回答