2

这是我尝试过的:

我使用该选项构建了项目-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吗?

4

1 回答 1

1

我建议省略serialVersionUID,如果您想编译无警告,请@SuppressWarnings("serial")myObject.

原因是这serialVersionUID是一种跨版本维护串行兼容性的机制,并且由于您从不序列化对象,因此串行兼容性无关紧要。

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

于 2014-08-09T03:49:02.897 回答