java中多个实体类使用的serialVersionUID具有相同的值
我发现serialVersionUID
我的项目中的许多实体类都使用相同的值。
现在,我的项目没有问题,CURD是可以的,但我认为使用相同的值是不正常的。
有问题吗?
回答
不会有任何问题,因为每个班级的序列号都是有效的。
编译器使用serialVersionUID
来比较类的版本,以保证在您尝试反序列化时使用该类的相同版本进行序列化。
这serialVersionUID
有助于序列化数据的版本控制。如果您更新其中一些类,您将能够更改其串行版本,以避免使用旧版本的类进行任何反序列化:由于 UID 不匹配,反序列化将不会成功。这通过序列化元素的不同版本保证了数据一致性。
没问题
在简历中:如果有多个类保持相同SerialVersionUID
(fe:) 1L
,则没有问题,因为如上所述,它适用于每个类(此处不涉及“重复版本 UID 类”机制)。它就像两个独立更新的元素一样正确,现在巧合的是,696969L
它们的序列号都保持不变:它只是每个人的版本号。
例如1L
,声明一个永久值就像告诉编译器:相信我,这个类没有改变,只是反序列化它。
1L
也是为实现该Serializable
接口的类提供的默认串行版本 UID ,意思是“这是第一个版本”;它也将成为那些不会改变的类的最后一个版本。
刚刚完成,serialVersionUID
没有实现一类Serializable
是0L
。
Java 对象序列化规范
如果类已定义
serialVersionUID
,则从类中检索它。如果
serialVersionUID
不是由类定义的,则根据虚拟机中类的定义计算。如果指定的类不可序列化或外部化,则返回 null。lookupAny 方法的行为类似于 lookup 方法,不同之处在于它返回任何类的描述符,而不管它是否实现了 Serializable。在
serialVersionUID
不实现Serializable一类是0L
。