如何在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。

其他回答

在序列化上花了一些时间后,我发现,我们不应该用一些随机值生成serialVersionUID,我们应该给它一个有意义的值。

这里有一个详细的评论。我正在处理这里的评论。

Actually, you should not be "generating" serial version UIDs. It is a dumb "feature" that stems from the general misunderstanding of how that ID is used by Java. You should be giving these IDs meaningful, readable values, e.g. starting with 1L, and incrementing them each time you think the new version of the class should render all previous versions (that might be previously serialized) obsolete. All utilities that generate such IDs basically do what the JVM does when the ID is not defined: they generate the value based on the content of the class file, hence coming up with unreadable meaningless long integers. If you want each and every version of your class to be distinct (in the eyes of the JVM) then you should not even specify the serialVersionUID value isnce the JVM will produce one on the fly, and the value of each version of your class will be unique. The purpose of defining that value explicitly is to tell the serialization mechanism to treat different versions of the class that have the same SVUID as if they are the same, e.g. not to reject the older serialized versions. So, if you define the ID and never change it (and I assume that's what you do since you rely on the auto-generation, and you probably never re-generate your IDs) you are ensuring that all - even absolutely different - versions of your class will be considered the same by the serialization mechanism. Is that what you want? If not, and if you indeed want to have control over how your objects are recognized, you should be using simple values that you yourself can understand and easily update when you decide that the class has changed significantly. Having a 23-digit value does not help at all.

希望这能有所帮助。祝你好运。

在macOS上,你可以找到serialVersionUID适用的地方。

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

private static final long serialVersionUID = ;

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

不需要任何插件:你只需要在IntelliJ中启用高亮:

IntelliJ首选项->编辑器->检查-> Java ->序列化问题->序列化类没有'serialVersionUID' -设置标志,并单击'确定'。

现在,如果您的类实现了Serializable,您将看到高亮显示,并在类名上使用alt+Enter将建议生成私有静态最终长serialVersionUID。

PS:从这里拍摄

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

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

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