如何为匿名类生成serialVersionUID?

时间:2014-08-08 10:57:03

标签: java serialization serialversionuid

这就是我的尝试:

我用-Xlint:serial选项构建了项目,我收到了这个警告:

MyClass.java:42: warning: [serial] serializable class <anonymous mypackage.MyClass$1> has no definition of serialVersionUID
        SerializableClass myObject = new SerializableClass() {
1 warning

然后将匿名类名复制为serialver的参数:

>serialver -classpath dist\Example.jar mypackage.MyClass$1

mypackage.MyClass$1:    static final long serialVersionUID = 23L;

我不打算对其进行序列化,并且我已经读过不建议序列化匿名类的对象。

将其保留为1L或根本没有serialVersionUID的定义是更好的做法吗?

1 个答案:

答案 0 :(得分:1)

我建议您省略serialVersionUID,如果您想免费编译警告,请在@SuppressWarnings("serial")的声明中添加myObject

原因是serialVersionUID是一种维护不同版本的串行兼容性的机制,因为您从不序列化该对象,所以串行兼容性并不重要。

此外,由于几个原因,序列化匿名内部类是有问题的。生成的类名称是串行格式的一部分,是特定于编译器的,如果文件的其余部分被修改和重新编译,它可能会无法控制地更改。匿名内部类还包含封闭实例和捕获的本地的隐藏字段,这些字段也将包含在序列化形式中 - 如果它们可以完全序列化的话。