2014-03-26 29 views
0

我想序列化Java类,因为警告:The serializable class GuiLote does not declare a static final serialVersionUID field of type long。 Eclipse的建议这两个选项: 添加默认的串行版本ID添加产生的串行版本ID。他们之间有什么不同? Eclipse中添加此为默认串行版本ID:可序列化类GuiLote没有声明long类型的静态final serialVersionUID字段

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

或将它用于产生串行版本ID:

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

这是我的代码:

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

+0

[为什么生成long serialVersionUID而不是简单的1L?]可能的重复(http://stackoverflow.com/questions/888335/why-generate-long-serialversionuid-instead-of-a-simple-1l) – SharpKnight

回答

1

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

如果您的对象的较旧表示法被反序列化,并且有旧字段中没有的新字段,则这些字段将以空值出现。因此,您有一个选择,要么快速失败,要么拒绝反序列化,如果版本不匹配或与空值一起生活,并保持与序列化数据的向后兼容性。

相关问题