Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是;声明一个静态的最终serialVersionUID“;警告意味着什么?如何修复?_Java - Fatal编程技术网

Java 什么是;声明一个静态的最终serialVersionUID“;警告意味着什么?如何修复?

Java 什么是;声明一个静态的最终serialVersionUID“;警告意味着什么?如何修复?,java,Java,可能重复: Java编译器警告:可序列化类[******]未声明long类型的静态最终SerialVersionId字段。 为什么??如何修复它?这一点解释得相当清楚: serialVersionUID是可序列化类的通用版本标识符。反序列化使用此数字确保加载的类与序列化对象完全对应。如果未找到匹配项,则引发InvalidClassException 您可以通过添加 private static final long serialVersionUID = 7526472295622776147L

可能重复:

Java编译器警告:
可序列化类[******]未声明long类型的静态最终SerialVersionId字段。


为什么??如何修复它?

这一点解释得相当清楚:

serialVersionUID是可序列化类的通用版本标识符。反序列化使用此数字确保加载的类与序列化对象完全对应。如果未找到匹配项,则引发InvalidClassException

您可以通过添加

private static final long serialVersionUID = 7526472295622776147L;  // unique id
去上课

进一步阅读:

  • (堆栈溢出)

旁注:如果您正在使用Eclipse,并且您(以及其他人)从未计划序列化您的类,那么您也可以通过转到

窗口→ 偏好→ JAVA→ 编译程序→ 错误/警告

在“不带serialVersionUID的可序列化类”上选择“忽略”。

只需添加

private static final long serialVersionUID = 1L;//or some long
描述得很好

序列化运行时关联 对于每个可序列化的class a版本 编号,称为serialVersionUID, 在反序列化过程中使用 验证发送方和接收方 已加载的序列化对象的 该对象的类是 与……相容 序列化。如果接收者 为已加载的对象加载了一个类 与此不同的SerialVersionId 对应发件人的类的, 然后反序列化将导致 InvalidClassException。可序列化的 类可以声明自己的 SerialVersionId显式由 声明一个名为 “serialVersionUID”必须是 静态、最终和长型:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
如果 serializable类不显式 声明一个serialVersionUID,然后 序列化运行时将计算 的默认SerialVersionId值 这门课是基于 类,如中所述 Java(TM)对象序列化 规范。然而,它是强有力的 建议所有可序列化的 类显式声明 SerialVersionId值,自 默认SerialVersionId计算 对课堂细节高度敏感 这可能因编译器而异 实现,并由此产生 在意外的InvalidClassException中 在反序列化期间。因此, 保证一致性 跨组的SerialVersionId值 不同的java编译器 实现,一个可序列化的类 必须声明一个显式 SerialVersionId值。也是 强烈建议明确 serialVersionUID声明使用 如果可能的话,私有修饰符,因为 此类声明仅适用于以下情况: 立即宣布 类--SerialVersionId字段不是 作为继承成员使用

另请参见

    • 这样声明:

      private static final long serialVersionUID = -4673040337179571462L;
      

      序列化接口需要它。

      是否扩展Swing对象

      我经常使用@suppressWarnings注释来消除这个警告


      我想,超出警告或提供唯一ID的问题取决于应用程序的规模和对象序列化的预期用途。

      如何生成752647229562776147L?您只需选择一个随机(唯一)长值。在eclipse中,您可以进行源代码清理…->自定义配置文件->缺少的代码->添加串行版本IDAIOOBE,这是我需要知道的最后一点。aioobe,在我的序列化文件中明确分配serialVersionUID不会导致应用程序在每次编译后随机生成一个?如何生成-4673040337179571462Why downvote?你能解释一下吗?我没有投反对票,但可能是因为这是一份来自。