【问题标题】:The serializable class GuiLote does not declare a static final serialVersionUID field of type long可序列化类 GuiLote 没有声明 long 类型的静态最终 serialVersionUID 字段
【发布时间】:2014-05-05 08:19:41
【问题描述】:

我想序列化一个 Java 类,因为一个警告:The serializable class GuiLote does not declare a static final serialVersionUID field of type long。 Eclipse 推荐这两个选项: 添加默认序列版本 ID添加生成的序列版本 ID。它们之间有什么区别? Eclipse 为 default 序列版本 ID 添加这个:

/**
 * 
 */
private static final long serialVersionUID = 1L;

或者为生成的序列版本ID添加这个:

/**
 * 
 */
private static final long serialVersionUID = 8534363180966005148L;

这是我的代码:

public class GuiLote extends JInternalFrame implements ActionListener { ... }

【问题讨论】:

标签: java class serialization warnings


【解决方案1】:

序列版本 ID 用于确定您的对象的序列化版本(来自磁盘、网络等)是否可以反序列化到当前应用程序中。如果 ID-s 匹配,则反序列化对象,如果不匹配,则抛出异常。基本上默认意味着它设置为 1,生成的将计算一个唯一的数字,考虑到类中的所有字段。

如果您的对象的旧表示被反序列化,并且旧版本中不存在新字段,这些字段将显示为 null。因此,您可以选择,要么快速失败并在版本不匹配时拒绝反序列化,要么与空值一起使用并保持与序列化数据的向后兼容性。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 2013-08-29
    • 2013-02-09
    • 2010-12-03
    • 2011-01-18
    • 2013-01-26
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多