问题标签 [serialversionuid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
21663 浏览

java - NetBeans 能否为 Java 类生成自动序列版本 ID?

我想通过生成自动序列版本 ID 来删除某些类的一些警告。在 Eclipse 中,这很简单——IDE 可以自动生成一个并将其添加到类中。但是,我在 NetBeans 中看不到此功能。是可用的么?如果是这样,它在哪里?如果没有,是否有可以启用它的插件?

0 投票
4 回答
1908 浏览

java - 如果更改 Java Exception 类扩展的基类,是否需要更新 serialVersionUID 值?

考虑以下 Java 异常类:

如果我希望将继承层次结构更新为 remove BarException,例如FooException直接派生自RuntimeException,这是否需要更改serialVersionUID值?

0 投票
3 回答
9538 浏览

java - 每次更改时 Eclipse 自动生成 serialVersionUID

Eclipse 很好地为我生成了 serialVersionUID。但这似乎是被动代码生成,因为除非我再次生成,否则当我更改文件时 id 不会自动更新。

每次我更改内容时,是否有某种方法可以生成 serialVersionUID?“保存操作”似乎不包含这样的选项 - 有人找到了这样做的方法吗?

最好将它与 IDE 保存操作或类似的东西结合起来,这样我就可以在不影响序列化的情况下恢复更改。

最好的问候, Touko

编辑:@gustafc:这有两个要点:

  • 如果我理解正确,不同的编译器最终可能会得到不同的 serialVersionUID 值
    • 来自Serializable API但是,强烈建议所有可序列化类显式声明 serialVersionUID 值,因为默认的 serialVersionUID 计算对类细节高度敏感,可能会因编译器实现而异,因此可能会在反序列化期间导致意外的 InvalidClassExceptions
  • 我正在使用一种命令模式,比如在服务器上做事的对象。因此,即使对象内容没有改变,在客户端和服务器端的类内容不同的情况下也能很好地捕捉到。
    • 但是再想一想,这可能不适用于自动生成的值,因为只有内容更改会改变它?所以,实际上我想要一个自动递增的serialVersionUID

这听起来合理吗?

Summa summarum,经过更多思考,在每次更改时自动递增的 serialVersionUID 会更好......

0 投票
3 回答
3260 浏览

java - 使用 maven2 插件自动生成串行版本 uid

是否有一个 maven 插件可以自动计算和更新所有实现 Serializable 接口的 java 类文件的串行版本 uid?

0 投票
5 回答
11349 浏览

java - 让Java运行时忽略serialVersionUIDs?

我必须使用大量未明确指定 serialVersionUID 的已编译 Java 类。由于它们的 UID 是由编译器任意生成的,因此许多需要序列化和反序列化的类最终会导致异常,即使实际的类定义匹配。(当然,这都是预期的行为。)

我返回并修复所有这些第 3 方代码是不切实际的。

因此,我的问题是:有什么方法可以让 Java 运行时忽略serialVersionUID 中的差异,并且只有在结构存在实际差异时才无法反序列化?

0 投票
1 回答
487 浏览

java - 反射可序列化的对象列表

我问了一个问题:反映一个列表对象

我实际上得到了答案,只是想了解为什么这样做时我会遇到非法ArgumentException:无法将静态最终 ArrayList SerialVersionUID 设置为 java.lang.long。但是当我做一个对象反映到另一个对象时没有错误。

0 投票
5 回答
252499 浏览

java - 这是什么意思:可序列化的类没有声明一个静态的最终 serialVersionUID 字段?

我有标题中给出的警告信息。我想了解并删除它。我已经找到了关于这个问题的一些答案,但由于技术术语过多,我不理解这些答案。能不能用简单的话来解释这个问题?

PS我知道OOP是什么。我知道什么是对象、类、方法、字段和实例化。

PPS 如果有人需要我的代码,它就在这里:

0 投票
2 回答
2752 浏览

python - 腌制对象版本控制

我正在做一个项目,我们有大量对象被序列化并使用pickle/存储到磁盘cPickle

随着项目生命周期的推进(在向现场客户发布后),未来的功能/修复可能会要求我们更改一些持久对象的签名。这可能是添加字段、删除字段,甚至只是更改一条数据的不变量。

是否有一种标准方法来标记将被腌制为具有特定版本的对象(如serialVersionUID在 Java 中)?基本上,如果我正在恢复 Foo 版本 234 的实例,但当前代码是 236,我希望收到一些关于 unpickle 的通知。我是否应该继续推出自己的解决方案(可能是 PITA)。

谢谢

0 投票
1 回答
1170 浏览

java - 接口中是否需要 serialVersioUID(我希望不需要)?

我的理解serialVersionUID只适用于类,因为我们只能为类创建对象,而serialVersionUID的概念是用于对象序列化和反序列化。

0 投票
3 回答
3168 浏览

java - 为什么没有自动生成serialVersionUID?

为什么没有serialVersionUID自动生成?我在应用程序服务器上遇到了一个问题,显然一个旧类正在被缓存。