有3种方法可以定义serialVersionUID:
1. private static final long serialVersionUID = 1L; (Default)
2. private static final long serialVersionUID = -8940196742313994740L; (Generated)
3. Don't define serialVersionUID and let the JVM define it at runtime. @Lance Java
但是我不明白第一种方式!
我已经看到,有人在源代码中为所有的java类定义了"serialVersionUID=1L“。
它的意思是什么?这有用吗?
如果所有类都有相同的serialVersionUID 1L,会出现问题吗?
发布于 2014-02-18 18:35:00
如果序列化对象的serialVersionUID
与要反序列化的类的serialVersionUID
不匹配,则JVM将抛出InvalidClassException
。
每次类以不兼容的方式改变时,类的serialVersionUID
都应该改变。通常,这意味着每次更改类的shape
时(即字段或方法更改)。
在某些情况下,您不希望更改serialVersionUID
。例如,您可以将对象的旧版本接受到您的应用程序中。在这种情况下,您可以让serialVersionUID
保持不变,新字段将为空。
发布于 2014-02-18 18:36:12
在序列化对象和将对象反序列化为JVM时使用该值。
此外,如果您的类发生了更改,并且您不想支持向后兼容性(即,能够反序列化使用上一个版本的类序列化的对象),则可以将版本号更改为任何其他值。
但是,为了支持向后兼容性,您需要保持与先前设置的serialVersionUID值相同的版本号。
最佳实践是在每次对类进行一些不兼容的更改时更改serialVersionUID。
发布于 2014-02-18 18:31:04
您可以将任何long
值赋给serialVersionUID
,但每次修改类时都必须更改它。
第二个看起来像是生成的serialVersionUID
,基于当前类版本的特性。
https://stackoverflow.com/questions/21850907
复制相似问题