7

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

4

5 回答 5

9

实际上,我对该“问题”的解决方案是在我的项目配置中停用该警告(我使用 Eclipse,但我猜 NetBeans 是相同的),因为恕我直言,这是一个错误的警告:没有serialVersion 是最安全的选择,因为 JVM 会计算一个这在启动时是唯一的(类似于类的哈希),同时显式添加它,然后当且仅当您对代码进行不兼容的更改时,您才需要注意更新它

因此,如果您不关心这一点,最好避免该值(这样它只与肯定兼容的版本兼容,但有一些误报:它认为不兼容,但实际上它会)放一个固定值,你会(可能,在我的情况下)忘记在需要时更新,导致实际的有效性错误(假阴性:它认为它是兼容的,但它不是)。

于 2009-09-03T13:10:33.533 回答
7

除非您需要与现有的序列化实例保持兼容,否则手动执行此操作也很简单。只需将此行复制到类中:

private static final long serialVersionUID = 1L;

请注意,绝对没有要求serialVersionUID跨类是唯一的。

于 2009-09-03T13:03:55.853 回答
6

开箱即用的 NetBeans 似乎不支持该功能,但插件支持。

请看一下

链接 1链接 2链接 3

于 2009-09-03T13:15:23.107 回答
1

(对于现在提出相同问题的用户)
我正在使用 nb7.4 并发现这个插件从 nb6.5 到 nb7.4
插件
我在 nb7.4 中对其进行了测试并且运行良好。对于服务版本 id 的含义,请查看
serialVersionUID
如果您明确添加它,您可以在不更改 uid 的情况下对您的类进行所有更改,直到您的类没有序列化并存储在某处:如果您创建类 A 序列化它
结束然后将其存储在数据库
结束然后更改类 A 使得不再与旧类 A 兼容,
当有人尝试将序列化对象从最后一个类 A 加载到新类 A 时,他可能会遇到问题。

当您更改 A 类并使其与上一个 A 类不兼容时,您必须更改 uid,因此如果有人尝试加载它将得到 InvalidClassExceptions。

于 2013-12-09T19:47:13.683 回答
0

要在 Netbeans 中禁用这些警告:

  1. 打开:工具 -> 选项
  2. 打开:编辑器 -> 提示选项卡
  3. 选择语言:Java
  4. 取消选中标准 Javac 警告 -> 序列化
  5. 好的

我还必须清除 ~/.netbeans/6.8/var/cache 并重新启动 Netbeans 以清除任务列表中的警告。

于 2010-01-07T08:48:53.287 回答