java - 当子类将其声明为 Final 时,SonarQube 无法看到重写的 equals

标签 java sonarqube

考虑下面的类

public class A {
   public boolean equals(Object obj){
      ...
   }
}

public class C extends A {
    public final boolean equals(Object obj) {
       ...
    } 
} 

SonarQube 分析无法看到 C 覆盖 A 类的 equals 方法,因为 C::equals 是最终的。

这会导致以下违规:

Subclasses that add fields should override "equals" (squid:S2160)

所以问题是为什么这个规则会在这种情况下触发? C::equals 方法确实覆盖了 A::equals (签名保持不变 - 使方法最终不会更改签名)。

这不是一个错误吗?

SonarJava 5.4

最佳答案

这确实是一个误报。 SonarJava 目前无法支持这种情况,类之间的继承关系仅在语义引擎中从子类到父类计算。

已创建以下 JIRA 票证来处理该问题:SONARJAVA-2818

关于java - 当子类将其声明为 Final 时,SonarQube 无法看到重写的 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51214382/

相关文章:

elasticsearch - SonarQube 进程退出,退出值 [es] : 137

java - SonarQube Eclipse 插件在本地分析时抛出错误

Java block 键盘按下

java - 是否可以创建使用 Spring Jdbc 和 Mysql 的独立 JavaFx 应用程序

java - java可以通过在同一行上覆盖时间来在命令行上做一个计时器吗?

java - SonarQube 因 java.lang.StackOverflowError 失败 - 如何确定导致错误的特定文件

java - SonarQube 不显示单元测试结果

java - 在 android 中创建一个 jar inside jar 并访问第一个 jar 的类

java - 处理 PrintWriter 无法正常工作

sonarqube - 可以并行化 SonarQube 后台任务吗?