• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

java的序列化注解Serial、序列化版本号serialVersionUID、ecliphotoshope自动生成serialVersionUID

武飞扬头像
听海边涛声
帮助1

说明

例如,jdk源码NTLMException类的定义,其中涉及到了序列化注解Serial和序列化版本号字段serialVersionUID:
学新通

序列化注解java.io.Serial

序列化注解java.io.Serial是在javaSE-14版本引入的。通常注解实现了序列化类的序列化相关的函数和字段,这样可以让编译器在编译的时候检查序列化相关的函数、字段的声明,提前发现错误。
5个序列化相关的方法:
学新通
2个序列化相关的字段:
学新通

序列版本号字段serialVersionUID

这个版本号的作用是反序列化的时候检查,检查序列化对象的接收者和发送者是否使用了相同的版本号,如果版本号不同,会导致出现 InvalidClassException异常。
如果在程序中没有明确定义这个字段,那么程序在序列化的时候会自动生成;如果程序中明确了定义这个字段,那么就使用定义的这个版本号。
强烈建议在程序中明确定义。因为如果自动生成这个字段,会依赖序列化类的很多方面,对类的细节敏感,而类的细节可能因为编译器实现而变化。
如果明确定义,这个字段名称为serialVersionUID,类型是long,用static, final修饰。另外,强烈建议加上private修饰。因为如果用private修饰,那么serialVersionUID仅对当前类有效,不能被子类继承。

有公司的编程规范就要求:序列化类新增属性时,不要修改 serialVersionUID 字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么要修改 serialVersionUID 值。

在eclipse中自动生成serialVersionUID的方法

示例描述

serialVersionUID可以手工写个值,没有问题。我们看别人代码的时候,有时候看到值是1L,有时候是一个很大的负的整数。尤其这个负的很大的整数,很好奇是怎么来的。
在eclipse中可以自动生成serialVersionUID,有两种选择方式。我们用一个示例讲解下过程。

例如,定义Demo1这个类,声明实现了Serializable接口,但还没有手工添加serialVersionUID字段,在类的左侧出现了黄色的提醒符号,这个是编译器的提醒,告诉我们代码不完善,需要修复:
学新通

鼠标放在左侧的黄色提醒符号上,有提醒,说没有声明serialVersionUID这个字段:
学新通

在黄色提醒符号上点击鼠标右键,出现上下文菜单:
学新通

单击上下文菜单中的Quick Fix,出现了两种生成serialVersionUID的方法:
第一行:

学新通

第二行:
学新通

第一种:Add default serial version ID

这个表示生成一个默认的serialVersionUID,用户可以自定义值。如果类自从首次发布以后确实经历了结构的变化,选这种生成方法。
在第一种选择上双击鼠标,生成的serialVersionUID如下所示(生成后,自己想修改为其它的值也可以,例如2L):
学新通

第二种:Add generated serial version ID

这个是Java编译器生成一个serialVersionUID。如果类自从首次发布以后没有经历结构的变化,选这种生成方法。
在第二种选择上双击鼠标,生成的serialVersionUID如下所示(这个生成后就不建议手工修改了):
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhaechb
系列文章
更多 icon
同类精品
更多 icon
继续加载