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?你能解释一下吗?我没有投反对票,但可能是因为这是一份来自。