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


126

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

但是在IntelliJ中该怎么办?

如何在IntelliJ中选择或生成相同的串行版本UID?

修改旧类该怎么办?

如果您未指定id,则会在运行时生成...



@JFIB serialVersionUID未指定时由编译器生成类常量。指定具有使更改的类版本的ID相同的优点(和危险)。也就是说,具有旧版本对象的文件将与新版本一起读取(反序列化),反之亦然。
Joop Eggen 2014年

Answers:


304

没有任何插件:

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

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

现在,如果您的课程实现了Serializable,您将看到高亮显示,并在类别名称上建议使用alt + Enter生成private static final long serialVersionUID

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


2
@SalilJunior不是。生成serialVersionUID的内置功能与检查警告相关。当您不想启用检查警告而在某些情况下会生成serialVersionUID时,您将陷入困境。
Fabian Barney

该解决方案对我不起作用,我只能看到以下选项:删除可打包实现,替换可打包实现,创建测试,创建子类以及使程序包私有。我正在使用的类同时实现了Parcelable和Serializable。任何想法?
gonver '17

您是否已检查上述设置中是否设置了所需标志?在v16和v17构想中都经过测试,效果很好。在设置窗口(右侧)中单击后,还要检查其他设置以进行此类检查。
Serhii Maksymchuk '17

我不知道这一点,发现对您有帮助。
Chaklader Asfak Arefe '18

62

最简单的方法:Alt+ Enter

private static final long serialVersionUID = ;

IntelliJ将在=。之后加下划线。将光标放在其上,然后按alt+ Enter(在Mac上为Option+ Enter)。您将看到一个弹出窗口,显示“随机更改serialVersionUID初始化程序”。只需按回车键,它将以随机长填充该空间。


感谢您在IntelliJ IDEA社区版2018.3.3版中为我工作
Tarun

还建议在Java文档中尽可能使用private修饰符。 docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/...
伊利亚·洛津斯基

2
更好地回答上述问题。
Akin Okegbile

32

2
如以下@Serhii所示,为什么可以轻松安装插件,为什么要安装。
shaz

2
@shaz我更喜欢在禁用该检查的情况下使用,但是对于某些类,需要获取显式的serialVersionUID。我不想分散对每个类的检查,而只需要一个对serialVersionUID进行检查。
Timofey

1
我认为该插件有助于为子类生成值,其中父类也可以序列化并包含一个serialVersionUID。当您更新了子类并需要为该类生成一个新的serialVersionUID而不更改父类的serialVersionUID时(在未对父类进行任何更改的情况下),这可以解决这种情况。
kapad

尽管这可以回答问题,但最好在此处提供实际信息,而不仅仅是链接。仅链接的答案不被认为是好的答案,可能会被删除
elixenide '18

3
@EdCottrell没有其他信息可提供。是否使用插件。
Meo

2

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

非常好,非常容易安装。您可以从插件菜单进行安装,选择从磁盘安装,然后在lib文件夹中选择解压缩的jar文件。重新启动,按Control + ins,然后弹出以从菜单生成串行UID。爱它。:-)


0

在代码编辑器中,打开要为其创建UID的类,右键单击->生成-> SerialVersionUID。您可能需要安装GenerateSerialVersionUID插件才能起作用。


1
您如何看待您的答案为解决此问题增加了一些新内容?如果答案不是,请消除您的答案,因为它没有用。
nazar_art

添加插件后,有些人可能对如何实际生成UID感到困惑。那就是添加的内容。
mykey

1
我猜他们可以阅读该插件的手册页。您的答案很明显。
nazar_art
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.