标签:自动生成 软件 warning 区分 rate 点击 提示 对象 nal
在很多实现接口 Serializable 的类中,我们都能看到 private static final long serialVersionUID,他有什么用呢?
如下代码,如果在 A 场景中代码如下
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
... ...
}
如下代码,如果在 B 场景中代码如下
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private String nickname
... ...
}
B 场景比 A场景多出一个 nickname 字段,这个时候 serialVersionUID 的值是否相同
如果 UseDTO 在不同场景中使用,
用来区分不同版本类的版本是否一致
private static final long serialVersionUID = 1L;
根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段。
private static final long serialVersionUID = -1060216618475607933L;
有的时候没有提供任何 serialVersionUID 的定义,Java序列化机制会根据编译的 class (它通过类名,方法名等诸多因素经过计算而得,理论上是一一映射的关系,也就是唯一的)自动生成一个 serialVersionUID 作序列化版本比较用,这种情况下,如果 class 文件(类名,方法明等)没有发生变化(增加空格,换行,增加注释,等等),就算再编译多次,serialVersionUID 也不会变化的.
例如实体类 UserDTO ,如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,那么我们把 UserDTO 的不同修改版本的 serialVersionUID 定义为一个值,列化实体都可以相互进行串行化和反串行化。
使用Eclipse/Myeclipse IDE时,会出现左侧的黄色叹号提示,点击这个黄色叹号
IntelliJ IDEA 默认不提供自动生成
IntelliJ IDEA> Preferences...
Plugins
No Plugins found Search in repositiories
Install
Serializable class without serialVersion ....
warning
点击 apply
假设 UserDTO 这个实体类在不同地方使用,对他们设置的 serialVersionUID 进行测试
Java 中的 serialVersionUID 是用来干什么的
标签:自动生成 软件 warning 区分 rate 点击 提示 对象 nal
原文地址:https://www.cnblogs.com/fishpro/p/12388806.html