如何在 Intellij 中生成串行版本 UID

Posted

技术标签:

【中文标题】如何在 Intellij 中生成串行版本 UID【英文标题】:How to generate serial version UID in Intellij 【发布时间】:2014-08-25 18:06:27 【问题描述】:

当我使用 Eclipse 时,它有一个很好的功能来生成串行版本的 UID。

但是在 IntelliJ 中该怎么做呢?

如何在 IntelliJ 中选择或生成相同的序列号版本 UID?

当你修改旧类时该怎么办?

如果没有指定id,则在运行时生成...

【问题讨论】:

重复***.com/questions/12912287/… @JFIB 类常量serialVersionUID在未指定时由编译器生成。指定具有使更改的类版本的 id 保持相同的优点(和危险)。即带有旧版本对象的文件将被新版本读取(反序列化),反之亦然。 @JFB What is a serialVersionUID and why should I use it? 【参考方案1】:

没有任何插件:

您只需要启用突出显示:(Idea v.2016、2017 和 2018,以前的版本可能具有相同或相似的设置)

文件 -> 设置 -> 编辑器 -> 检查 -> Java -> 序列化问题 -> 没有“serialVersionUID”的可序列化类 - 设置标志并单击“确定”。 (对于 Mac,设置位于 IntelliJ IDEA -> Preferences...)

现在,如果您的类实现了Serializable,您将看到高亮显示,并且类名上的 alt+Enter 将要求您生成 private static final long serialVersionUID

UPD:查找此设置的更快方法 - 您可以使用热键 Ctrl+Shift+A(查找操作),键入 Serializable class without 'serialVersionUID' - 第一个就是那个。

【讨论】:

@SalilJunior 不是真的。生成 serialVersionUID 的内置功能与检查警告相关联。当您不想启用检查警告但在某些情况下生成 serialVersionUID 时,您会陷入困境。 这个解决方案对我不起作用,我只能看到选项:删除 Parcelable 实现,替换 Parcelable 实现,创建测试,创建子类和使包私有。我使用的类同时实现了 Parcelable 和 Serializable。有什么想法吗? 您是否检查过在上面的设置中设置了需要的标志?在 v16 和 v17 的想法中测试,工作正常。在设置窗口(右侧)中单击后,还要检查此类检查的其他设置。 我不知道这个并且觉得很有帮助。【参考方案2】:

最简单的方法:Alt+Enter开启

private static final long serialVersionUID = ;

IntelliJ 将在= 之后的空格加下划线。将光标放在上面并点击alt+Enter(Mac 上为Option+Enter)。你会得到一个弹出窗口,上面写着“Randomly Change serialVersionUID Initializer”。只需按 Enter 键,它就会用随机长度填充该空间。

【讨论】:

感谢在 IntelliJ IDEA 社区版 2018.3.3 版中为我工作 Java 文档中还建议尽可能使用 private 修饰符。 docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/… 对上述问题的更好回答。 它的工作原理是确保在 (alt+Enter) 之前添加分号,例如: private static final long serialVersionUID =(alt+enter) ; 我在这里看到的主要问题是您必须自己输入所有修饰符 - private static final...【参考方案3】:

安装GenerateSerialVersionUID插件

【讨论】:

为什么安装插件很容易,如下面的@Serhii 所示。 @shaz 我更喜欢禁用该检查,但对于某些类,需要获得明确的 serialVersionUID。我不想分散对每个类的检查,而我只需要一个类的 serialVersionUID。 我认为该插件有助于为父类也可序列化并包含serialVersionUID 的子类生成值。当您更新了子类并且需要在不更改父类的serialVersionUID 的情况下为该类生成新的serialVersionUID(在没有对父类进行更改的情况下)时,这会处理这种情况。 虽然这可能会回答问题,但最好在此处提供实际信息而不仅仅是链接。 Link-only answers are not considered good answers and will probably be deleted. @EdCottrell 没有其他信息可提供。使用或不使用插件。【参考方案4】:

IntelliJ IDEA 插件/GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

非常好,很容易安装。你可以从插件菜单安装它,选择从磁盘安装,选择你在lib文件夹中解压的jar文件。重启,control+ins,弹出菜单生成串口UID。爱它。 :-)

【讨论】:

以上是关于如何在 Intellij 中生成串行版本 UID的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IntelliJ IDEA 中生成 DAO 类

如何在调试/运行 Spring Boot 项目的 IntelliJ“out”目录中生成 build-info.properties?

IntelliJ IDEA中生成jar包并运行

我们如何从可编辑的 Java 代码中生成 IntelliJ IDEA 中的序列图?

如何在 SAP UI5 代码中生成 UUID? [复制]

2017.5.24 在intelliJ IDEA 中生成war包