Java SerialVersionUid可以是任何数字,还是必须由编译器生成?
如果我为我的类(比如说1234)编写serialversionUid,并且我知道我的程序中没有其他类使用它,那么这很好,还是我必须始终使用编译器生成的uid?serialversionUid可以是任何长度,为对象提供唯一的签名以进行序列化和反序列化。我甚至不认为它必须是独一无二的。这是为了让序列化程序知道这是同一个Foo.class,即使您更改了该类的结构。我通常使用-1L作为值。它可以是任何数字,至少它只需要表示该类的版本。它根本不必是唯一的。这里是设置自己的serialVersionUID的另一个原因-这是不正确的。充其量也只是说得不好。正如您自己使用的-1L所示,它不必是唯一的,它的功能不是“唯一地标识您的对象”。它的功能是定义其序列化签名,顾名思义。EJP您是对的。它是序列化的唯一对象签名。ThxI没有这么说。它不是“序列化的唯一对象签名”。classname和serialVersionUID的组合必须标识(唯一标识)被序列化的类的版本。为了序列化的目的,在解组(如果您愿意,请反序列化)时,按照答案中的说明使用此组合;将序列化的类版本比较到类路径上的类版本。Java SerialVersionUid可以是任何数字,还是必须由编译器生成?,java,serialization,Java,Serialization,如果我为我的类(比如说1234)编写serialversionUid,并且我知道我的程序中没有其他类使用它,那么这很好,还是我必须始终使用编译器生成的uid?serialversionUid可以是任何长度,为对象提供唯一的签名以进行序列化和反序列化。我甚至不认为它必须是独一无二的。这是为了让序列化程序知道这是同一个Foo.class,即使您更改了该类的结构。我通常使用-1L作为值。它可以是任何数字,至少它只需要表示该类的版本。它根本不必是唯一的。这里是设置自己的serialVersionUID的