如何在IntelliJ IDEA中生成这个值?

我去设置->错误-> Serialization问题-> Serializable类没有' serialVersionUID ',但它仍然没有显示警告。我的类PKladrBuilding父类实现了接口Serializable。

部分代码:

public class PKladrBuilding extends PRQObject

public abstract class PRQObject extends PObject

public abstract class PObject implements Serializable

当前回答

由Olivier Descout安装GenerateSerialVersionUID插件。

进入:菜单文件→设置→插件→浏览存储库→GenerateSerialVersionUID

安装插件并重新启动。

现在您可以从菜单Code→generate→serialVersionUID '或快捷方式生成id。

其他回答

最简单的现代方法:Alt+Enter on

private static final long serialVersionUID = ;

IntelliJ将在=后面的空格下划线。把你的光标放在上面,然后按alt+Enter (Mac上的选项+Enter)。你会看到一个弹窗,上面写着“随机更改serialVersionUID初始化器”。只要按回车键,它就会用一个随机的long填充那个空间。

我不确定你是否有一个旧版本的IntelliJ IDEA,但如果我进入菜单文件→设置…→检查→序列化问题→没有启用serialVersionUID的可序列化类,您提供的类会给我警告。

如果我尝试第一堂课,我看到:

BTW:直到我在每个类的末尾添加{}来修复编译错误,它才向我显示警告。

v2018.2.1版本

首选项>编辑器>检查> Java >序列化问题>切换“没有'serialVersionUID'的可序列化类”。

警告应该出现在类声明旁边。

如果您想为一堆文件添加缺少的serialVersionUID, IntelliJ IDEA可能不能很好地工作。我想出了一些简单的脚本来轻松实现这个目标:

base_dir=$(pwd)
src_dir=$base_dir/src/main/java
ic_api_cp=$base_dir/target/classes

while read f
do
    clazz=${f//\//.}
    clazz=${clazz/%.java/}
    seruidstr=$(serialver -classpath $ic_api_cp $clazz | cut -d ':' -f 2 | sed -e 's/^\s\+//')
    perl -ni.bak -e "print $_; printf qq{%s\n}, q{    private $seruidstr} if /public class/" $src_dir/$f
done

将这个脚本保存在~/bin文件夹中的add_serialVersionUID.sh。然后在Maven或Gradle项目的根目录下运行:

add_serialVersionUID.sh < myJavaToAmend.lst

这个.lst包含了添加serialVersionUID的Java文件列表,格式如下:

com/abc/ic/api/model/domain/item/BizOrderTransDO.java
com/abc/ic/api/model/domain/item/CardPassFeature.java
com/abc/ic/api/model/domain/item/CategoryFeature.java
com/abc/ic/api/model/domain/item/GoodsFeature.java
com/abc/ic/api/model/domain/item/ItemFeature.java
com/abc/ic/api/model/domain/item/ItemPicUrls.java
com/abc/ic/api/model/domain/item/ItemSkuDO.java
com/abc/ic/api/model/domain/serve/ServeCategoryFeature.java
com/abc/ic/api/model/domain/serve/ServeFeature.java
com/abc/ic/api/model/param/depot/DepotItemDTO.java
com/abc/ic/api/model/param/depot/DepotItemQueryDTO.java
com/abc/ic/api/model/param/depot/InDepotDTO.java
com/abc/ic/api/model/param/depot/OutDepotDTO.java

该脚本使用JDK的serialVer工具。当您希望修改大量最初没有设置serialVersionUID的类,同时保持与旧类的兼容性时,它是理想的。

我使用Android Studio 2.1,我有更好的一致性,通过点击类名称,并悬停在它一秒钟。