2014-01-09 27 views
0

即使我没有添加private static final long serialVersionUID = 1L;或类似的东西,我也只能将对象保存到数据库中,如果implements Serializable带有serialVersionID的域对象?

问题:我必须设置此serialID为必填项吗?如果我不这样做有什么缺点?

回答

1
First what is SerialVersionUID and is it mandatory? 

serialVersionUID被用作Serializable类中的版本控制。如果您没有明确声明serialVersionUID,则JVM将根据您的Serializable类的各个方面自动为您执行此操作,如Java(TM) Object Serialization Specification中所述。

Drawbacks if I dont? 

默认的serialVersionUID计算是类细节高度敏感和可从不同的JVM实现反序列化过程而变化,并且导致意外InvalidClassExceptions

因此,为了避免这种情况,最好指定serialVersionUID为您的序列化和反序列化过程

0

我认为这不是强制性的。当我创建一个扩展JFrame的类时,Eclipse会显示相同的警告。我总是添加@SuppressWarnings("serial")

+0

你还不如禁用完全在工作区设置警示则:/我宁愿只是让Eclipse中生成默认的serialVersionUID而不是添加注释。 – Gimby

2

您不需要serialVersionUID就可以使对象可序列化。只有在需要能够读取使用旧版本类的序列化对象时才需要,或者在进行一些小的更改(例如字段的排序)时维护序列化格式。

我写了一个blog post(法语对不起,但google translate可以帮助)。