我想通过生成自动序列版本 ID 来删除某些类的一些警告。在 Eclipse 中,这很简单——IDE 可以自动生成一个并将其添加到类中。但是,我在 NetBeans 中看不到此功能。是可用的么?如果是这样,它在哪里?如果没有,是否有可以启用它的插件?
5 回答
实际上,我对该“问题”的解决方案是在我的项目配置中停用该警告(我使用 Eclipse,但我猜 NetBeans 是相同的),因为恕我直言,这是一个错误的警告:没有serialVersion 是最安全的选择,因为 JVM 会计算一个这在启动时是唯一的(类似于类的哈希),同时显式添加它,然后当且仅当您对代码进行不兼容的更改时,您才需要注意更新它。
因此,如果您不关心这一点,最好避免该值(这样它只与肯定兼容的版本兼容,但有一些误报:它认为不兼容,但实际上它会)放一个固定值,你会(可能,在我的情况下)忘记在需要时更新,导致实际的有效性错误(假阴性:它认为它是兼容的,但它不是)。
除非您需要与现有的序列化实例保持兼容,否则手动执行此操作也很简单。只需将此行复制到类中:
private static final long serialVersionUID = 1L;
请注意,绝对没有要求serialVersionUID
跨类是唯一的。
(对于现在提出相同问题的用户)
我正在使用 nb7.4 并发现这个插件从 nb6.5 到 nb7.4
插件
我在 nb7.4 中对其进行了测试并且运行良好。对于服务版本 id 的含义,请查看
serialVersionUID
如果您明确添加它,您可以在不更改 uid 的情况下对您的类进行所有更改,直到您的类没有序列化并存储在某处:如果您创建类 A 序列化它
结束然后将其存储在数据库
结束然后更改类 A 使得不再与旧类 A 兼容,
当有人尝试将序列化对象从最后一个类 A 加载到新类 A 时,他可能会遇到问题。
当您更改 A 类并使其与上一个 A 类不兼容时,您必须更改 uid,因此如果有人尝试加载它将得到 InvalidClassExceptions。
要在 Netbeans 中禁用这些警告:
- 打开:工具 -> 选项
- 打开:编辑器 -> 提示选项卡
- 选择语言:Java
- 取消选中标准 Javac 警告 -> 序列化
- 好的
我还必须清除 ~/.netbeans/6.8/var/cache 并重新启动 Netbeans 以清除任务列表中的警告。