Kir*_*rov 287 java serialization intellij-idea
如何在IntelliJ IDEA中生成此值?
我转到设置 - > 错误 - > 序列化问题 - >没有'serialVersionUID'的Serializable类,但它仍然没有显示警告.我的类PKladrBuilding父实现接口Serializable.
部分代码:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
Run Code Online (Sandbox Code Playgroud)
Pet*_*rey 562
我不确定您是否有旧版本的IntelliJ IDEA,但如果我转到菜单文件 → 设置... → 检查 → 序列化问题 →没有启用'serialVersionUID'的Serializable类,则您提供的课程会给我警告.

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

顺便说一句:在我添加{ }到每个类的末尾以修复编译错误之前,它没有向我显示警告.
Sil*_*ria 166
由Olivier Descout 安装GenerateSerialVersionUID插件.
转到:菜单文件 → 设置 → 插件 → 浏览存储库 →GenerateSerialVersionUID
安装插件并重新启动.
现在,您可以从菜单代码 → 生成 →serialVersionUID`或快捷方式生成 ID .
Nik*_*tre 63
没有任何插件:您只需要在IntelliJ中启用高亮显示:
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'- 设置标志并单击'OK'.
现在,如果您的类实现Serializable,您将看到突出显示,并且alt+Enter类名将建议生成private static final long serialVersionUID.
Emd*_*won 35
在序列化上花了一些时间之后,我发现,我们不应该生成serialVersionUID一些随机值,我们应该给它一个有意义的值.
以下是对此的详细评论.我在这里处理评论.
实际上,您不应该"生成"串行版UID.这是一个愚蠢的"功能",源于对Java如何使用该ID的一般误解.您应该为这些ID提供有意义的,可读的值,例如从1L开始,并在每次认为类的新版本应该渲染所有先前版本(可能先前已序列化)时将其递增.生成此类ID的所有实用程序基本上都执行JVM在未定义ID时所执行的操作:它们根据类文件的内容生成值,从而产生无法读取的无意义的长整数.如果您希望类的每个版本都是不同的(在JVM的眼中),那么您甚至不应该指定serialVersionUID值,因为JVM将动态生成一个,并且您的类的每个版本的值将是独一无二.明确定义该值的目的是告诉序列化机制将具有相同SVUID的类的不同版本视为相同,例如不拒绝旧的序列化版本.因此,如果您定义ID并且永远不会更改它(并且我认为这是您所做的事情,因为您依赖于自动生成,并且您可能永远不会重新生成您的ID)您将确保所有 - 甚至绝对不同 - 的版本通过序列化机制,您的类将被视为相同.那是你要的吗?如果没有,并且如果您确实希望控制对象的识别方式,则应该使用您自己可以理解的简单值,并在您确定类已经发生显着变化时轻松更新.拥有23位数值并没有任何帮助.
希望这可以帮助.祝好运.
pha*_*lvi 16
为了生成值使用
private static final long serialVersionUID = $randomLong$L;
$END$
Run Code Online (Sandbox Code Playgroud)
并为randomLong模板变量提供以下值:groovyScript("new Random().nextLong().abs()")
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
fal*_*s4e 13
此外,您还可以添加可以完成工作的实时模板.
要做到这一点,按Ctrl+Alt+S- > "Live Templates"部分 - > other(或你希望的w/e)
然后使用如下定义创建一个新的:
private static final long serialVersionUID = 1L;
$END$
Run Code Online (Sandbox Code Playgroud)
然后选择definition范围并将其另存为'serial'
现在你可以输入serialTAB类体了.
最简单的现代方法:Alt+ Enteron
private static final long serialVersionUID = ;
Run Code Online (Sandbox Code Playgroud)
IntelliJ 将在=. 将光标放在上面并点击alt+ Enter(Mac 上的Option+ Enter)。你会得到一个弹出窗口,上面写着“随机更改 serialVersionUID 初始化程序”。只需按回车键,它就会用随机长度填充该空间。
| 归档时间: |
|
| 查看次数: |
209824 次 |
| 最近记录: |