Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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 SerialVersionUid可以是任何数字,还是必须由编译器生成?_Java_Serialization - Fatal编程技术网

Java SerialVersionUid可以是任何数字,还是必须由编译器生成?

Java SerialVersionUid可以是任何数字,还是必须由编译器生成?,java,serialization,Java,Serialization,如果我为我的类(比如说1234)编写serialversionUid,并且我知道我的程序中没有其他类使用它,那么这很好,还是我必须始终使用编译器生成的uid?serialversionUid可以是任何长度,为对象提供唯一的签名以进行序列化和反序列化。我甚至不认为它必须是独一无二的。这是为了让序列化程序知道这是同一个Foo.class,即使您更改了该类的结构。我通常使用-1L作为值。它可以是任何数字,至少它只需要表示该类的版本。它根本不必是唯一的。这里是设置自己的serialVersionUID的

如果我为我的类(比如说1234)编写serialversionUid,并且我知道我的程序中没有其他类使用它,那么这很好,还是我必须始终使用编译器生成的uid?

serialversionUid可以是任何长度,为对象提供唯一的签名以进行序列化和反序列化。我甚至不认为它必须是独一无二的。这是为了让序列化程序知道这是同一个Foo.class,即使您更改了该类的结构。我通常使用-1L作为值。

它可以是任何数字,至少它只需要表示该类的版本。它根本不必是唯一的。

这里是设置自己的serialVersionUID的另一个原因-这是不正确的。充其量也只是说得不好。正如您自己使用的-1L所示,它不必是唯一的,它的功能不是“唯一地标识您的对象”。它的功能是定义其序列化签名,顾名思义。EJP您是对的。它是序列化的唯一对象签名。ThxI没有这么说。它不是“序列化的唯一对象签名”。classname和serialVersionUID的组合必须标识(唯一标识)被序列化的类的版本。为了序列化的目的,在解组(如果您愿意,请反序列化)时,按照答案中的说明使用此组合;将序列化的类版本比较到类路径上的类版本。