首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >1L serialVersionUID是什么意思?何时可以使用此默认值1L?

1L serialVersionUID是什么意思?何时可以使用此默认值1L?
EN

Stack Overflow用户
提问于 2014-02-18 18:29:07
回答 3查看 37.9K关注 0票数 20

有3种方法可以定义serialVersionUID:

代码语言:javascript
复制
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,会出现问题吗?

EN

回答 3

Stack Overflow用户

发布于 2014-02-18 18:35:00

如果序列化对象的serialVersionUID与要反序列化的类的serialVersionUID不匹配,则JVM将抛出InvalidClassException

每次类以不兼容的方式改变时,类的serialVersionUID都应该改变。通常,这意味着每次更改类的shape时(即字段或方法更改)。

在某些情况下,您不希望更改serialVersionUID。例如,您可以将对象的旧版本接受到您的应用程序中。在这种情况下,您可以让serialVersionUID保持不变,新字段将为空。

票数 6
EN

Stack Overflow用户

发布于 2014-02-18 18:36:12

在序列化对象和将对象反序列化为JVM时使用该值。

此外,如果您的类发生了更改,并且您不想支持向后兼容性(即,能够反序列化使用上一个版本的类序列化的对象),则可以将版本号更改为任何其他值。

但是,为了支持向后兼容性,您需要保持与先前设置的serialVersionUID值相同的版本号。

最佳实践是在每次对类进行一些不兼容的更改时更改serialVersionUID。

票数 2
EN

Stack Overflow用户

发布于 2014-02-18 18:31:04

您可以将任何long值赋给serialVersionUID,但每次修改类时都必须更改它。

第二个看起来像是生成的serialVersionUID,基于当前类版本的特性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21850907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档