Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:应该是可序列化的内部&;匿名类是否具有SerialVersionId?_Java_Serialization_Inner Classes_Anonymous Class_Serialversionuid - Fatal编程技术网

Java:应该是可序列化的内部&;匿名类是否具有SerialVersionId?

Java:应该是可序列化的内部&;匿名类是否具有SerialVersionId?,java,serialization,inner-classes,anonymous-class,serialversionuid,Java,Serialization,Inner Classes,Anonymous Class,Serialversionuid,虽然我目前不打算序列化任何东西,但我为所有可序列化的外部类以及静态嵌套类提供了一个SerialVersionUID,因为这是正确的方法 然而,我已经读过了 强烈反对内部类(即非静态成员类的嵌套类)的序列化,包括本地类和匿名类,原因有几个 所以我的问题是: 我应该为内部类和匿名类分别提供一个SerialVersionUID,还是应该为它们添加一个@SuppressWarnings(“serial”) 一种方式比另一种更合适吗 无论如何,我都会暂时引用这些类,因为我不希望它们被序列化。给它们一个se

虽然我目前不打算序列化任何东西,但我为所有可序列化的外部类以及静态嵌套类提供了一个
SerialVersionUID
,因为这是正确的方法

然而,我已经读过了

强烈反对内部类(即非静态成员类的嵌套类)的序列化,包括本地类和匿名类,原因有几个

所以我的问题是:

我应该为内部类和匿名类分别提供一个
SerialVersionUID
,还是应该为它们添加一个
@SuppressWarnings(“serial”)

一种方式比另一种更合适吗


无论如何,我都会暂时引用这些类,因为我不希望它们被序列化。

给它们一个serialVersionUID,因为:

  • 这是一个很好的常规做法,明确说明这一点肯定没有坏处
  • 警告应该得到解决,而不是压制
  • 有时,当内部类变得足够大时,它们会被更改为顶级类

很好(出于您链接到的文档中所述的所有原因),您不会序列化这些内部类的实例。我想,如果你是偏执狂或者担心其他开发者可能不会做出同样的判断,您可以通过在每个内部类中使用
writeObject
方法来强制执行该选择,该方法无条件抛出异常。

我认为不应该序列化这些类的建议是不可取的,因为您不知道JVM是什么,反序列化对象的类在类路径上。所以我应该将它们视为其他可序列化类?如果需要版本之间的兼容性,我只会使用serialVersionUID。如果你把对象写在一个文件或类似的文件中。特别是关于匿名类:我注意到opensdk的最新版本已经停止警告这些。(我有opensdk8和opensdk11;前者警告,后者不警告)不确定其他内部类;我发现很难判断编译器是如何决定是否发出警告的。我想我不会在每个内部类中添加writeObject方法。特别是因为一些(主要是匿名类)的目的是尽可能短,以便更整洁。但我至少要添加一个SerialVersionUID。@Lonenebula除非您已经有序列化问题,否则通常不需要添加
writeObject()
etc方法。