Java Sonarqube错误:类定义了一个计算的SerialVersionId,它不';t等于计算值

Java Sonarqube错误:类定义了一个计算的SerialVersionId,它不';t等于计算值,java,sonarqube,serializable,correctness,serialversionuid,Java,Sonarqube,Serializable,Correctness,Serialversionuid,正确性-类定义的计算SerialVersionId不等于计算值 这个serializable类定义了一个serialVersionUID,它看起来是一个计算值,但是该值与计算值不匹配,因此失去了作为版本指示符的值。创建自定义值,如1、2、3、4。。等等,或者使用IDE重新计算serialVersionUID 可能指的是该领域: private static final long serialVersionUID = 18234907734L; 为什么18234907734L无效?1823490

正确性-类定义的计算SerialVersionId不等于计算值


这个serializable类定义了一个serialVersionUID,它看起来是一个计算值,但是该值与计算值不匹配,因此失去了作为版本指示符的值。创建自定义值,如1、2、3、4。。等等,或者使用IDE重新计算serialVersionUID

可能指的是该领域:

private static final long serialVersionUID = 18234907734L;

为什么18234907734L无效?

18234907734L
无效,因为您所做的更改使类的新版本的序列化形式与旧版本的序列化形式不兼容。您应该更新
serialVersionUID
的值,但可能检测到您没有更新

(Sonar可能不会比较新旧版本号,而是知道IDE使用什么算法生成版本号,并检查id是否与计算结果匹配)

改变

private static final long serialVersionUID = 18234907734L;

当您以某种方式更改类结构时,不要忘记更新它,例如添加新字段或删除字段


另请参见

“要么创建自定义值,如1、2、3、4..等,要么使用IDE重新计算serialVersionUID。”:这其中有什么不清楚的地方?我的意思是18234907734L和1L之间有什么区别,两者都是有效的长格式。Sonarqube试图在这里保持智能。如果有人手动赋值,它们通常是小数值,而自动计算的值(基于类中的字段)通常是大数值。谢谢@Henry!
private static final long serialVersionUID = 1L;