Sonarqube 错误:类定义了一个计算的 serialVersionUID,它不等于计算的值

Posted

技术标签:

【中文标题】Sonarqube 错误:类定义了一个计算的 serialVersionUID,它不等于计算的值【英文标题】:Sonarqube error: Class defines a computed serialVersionUID that doesn't equate to the calculated value 【发布时间】:2020-10-27 21:31:54 【问题描述】:

正确性 - 类定义了一个不等于计算值的计算 serialVersionUID

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

大概指的领域:

private static final long serialVersionUID = 18234907734L;

为什么 18234907734L 无效?

【问题讨论】:

“要么创建一个自定义值,如 1、2、3、4.. 等,要么使用您的 IDE 重新计算 serialVersionUID。”:这有什么不清楚的地方? 我的意思是 18234907734L 和 1L 有什么区别,都是 long 有效。 Sonarqube 在这里尝试变得聪明。如果有人手动分配值,它们通常是小数字,而自动计算的值(基于类中的字段)通常是大数字。 谢谢@Henry! 【参考方案1】:

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

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

改变

private static final long serialVersionUID = 18234907734L;

private static final long serialVersionUID = 1L;

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

另见What is a serialVersionUID and why should I use it?

【讨论】:

以上是关于Sonarqube 错误:类定义了一个计算的 serialVersionUID,它不等于计算的值的主要内容,如果未能解决你的问题,请参考以下文章

Sonarqube 扫描仪错误 DirectoryNotEmptyException

SonarQube Azure Devops 未授权

SonarQube的缺陷详解

SonarQube的缺陷详解

SonarQube的BUG定义

SonarQube的BUG定义