即使我没有添加implements Serializable
或类似内容,我也只能将对象保留到数据库private static final long serialVersionUID = 1L;
。
问题:我必须设置此serialID是强制性的吗?如果我不这样做会有什么缺点?
答案 0 :(得分:2)
您不需要serialVersionUID
来使对象可序列化。只有当您需要能够读取使用旧版本的类序列化的对象时才需要它,或者在您进行一些小的更改时保持序列化格式(例如,字段的排序)。
我写了blog post(法语抱歉,但google translate可以提供帮助)。
答案 1 :(得分: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
答案 2 :(得分:0)
我认为这不是强制性的。当我创建一个扩展JFrame的类时,Eclipse会显示相同的警告。我总是添加@SuppressWarnings("serial")
。