【发布时间】:2013-02-06 03:33:59
【问题描述】:
编辑:我所说的随机数是指一个大的计算数字,对我们作为开发人员来说没有语义意义
在实现 Serializable 接口时,它的最佳实践是指定串行版本 UID 非常重要。在许多地方,我经常看到使用随机数。例如
Effective 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 也提供了生成这些随机数的选项(尽管主要的默认设置似乎是生成1L 的serialVersionUID)
为什么要使用随机数?当它像任何明智的修订控制一样发生变化时,从 1L 开始并增加到 2L 不是更有意义吗?我能想到的唯一一次使用看似随机的数字是,如果您没有指定一个 serialVersionUID 开头并且现在想要这样做(它将您与运行时自动生成的版本联系起来以提供向后兼容性支持)。
【问题讨论】:
-
我不认为它们是“随机”数字,它们只是看起来很随意。它们可能是类中成员/方法的某种散列。不过,完全是猜测。我没有任何信息支持这种说法。
-
@JonathanNewmuis 是根据方法签名等计算出来的。
-
你是对的,因为它们是计算值,尽管它们对我们没有意义,它们实际上是随机的
-
@BrianRoach 不完全是同一个问题,因为那只是问为什么应该使用
1L以外的任何东西。
标签: java serialization