这就是我的尝试:
我用-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
的定义是更好的做法吗?
答案 0 :(得分:1)
我建议您省略serialVersionUID
,如果您想免费编译警告,请在@SuppressWarnings("serial")
的声明中添加myObject
。
原因是serialVersionUID
是一种维护不同版本的串行兼容性的机制,因为您从不序列化该对象,所以串行兼容性并不重要。
此外,由于几个原因,序列化匿名内部类是有问题的。生成的类名称是串行格式的一部分,是特定于编译器的,如果文件的其余部分被修改和重新编译,它可能会无法控制地更改。匿名内部类还包含封闭实例和捕获的本地的隐藏字段,这些字段也将包含在序列化形式中 - 如果它们可以完全序列化的话。