0

还有一个愚蠢的问题。但是想问一下,因为它从过去 1 小时开始让我头晕目眩。

我们都知道 serialVersionUID 是唯一的。什么是独特性水平?它在项目或工作区或服务器中应该是唯一的吗?

如果同一工作区中的两个类具有相同的 serialVersionUID(复制粘贴),它会导致 IllegalClassCasteException 或任何其他异常吗?

如果每个项目/工作区都是唯一的,那么为什么 Eclipse 提供默认的 serialVersionUID (1L)?

4

2 回答 2

2

serialVersionId 当对象序列化和传输并在其他一些环境(主要是其他 jvm)中运行时会有所帮助,然后serialVersionId将反序列化并检查它是否与环境竞争。所以只要你有相同的jvm你就不用担心。这就是为什么 Eclipse 提供1L

于 2014-05-06T12:33:32.403 回答
2

我们都知道 serialVersionUID 是唯一的

不,它根本不必是唯一的。如果你愿意,你所有的类都可以有相同的 serialVersionUid。

给定类的两个版本,如果它们在序列化方面兼容,则应该具有相同的 serialVersionUid。如果它们没有相同的 serialVersionUid,Java 会认为它们不兼容,即使类的两个版本之间的更改实际上并没有破坏它们的兼容性。

如果一个类的两个版本在序列化方面不兼容,那么最好通过更改 serialVersionUid 来明确这一点。

看来您甚至都不知道 serialVersionUid 是什么。如果是这种情况,那么我建议不要将任何 serialVersionUid 添加到您的任何类中,并让 JVM 自行解决。

于 2014-05-06T12:31:16.727 回答