Java 当子类将其声明为final时,SonarQube无法看到重写的等于

Java 当子类将其声明为final时,SonarQube无法看到重写的等于,java,sonarqube,Java,Sonarqube,考虑下面的类 public class A { public boolean equals(Object obj){ ... } } public class C extends A { public final boolean equals(Object obj) { ... } } SonarQube分析未能看到Coverridenequals类A的方法,因为C::equals是最终的 导致以下违规行为: 添加字段的子类应覆盖“e

考虑下面的类

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

public class C extends A {
    public final boolean equals(Object obj) {
       ...
    } 
} 
SonarQube分析未能看到
C
overriden
equals
A
的方法,因为
C::equals
是最终的

导致以下违规行为:

添加字段的子类应覆盖“equals”(squid:S2160)

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

这不是一只虫子吗


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


已创建以下JIRA票证来处理此问题:

问题是什么?根据SonarQu应该是什么规则(您使用什么版本和插件?)查找此问题?@G.Ann-SonarSourceTeam更新为question@JeroenHeiersonarqube 7.2.1,squid:S2160。存在于6.3中too@Sa广告,你的Java版本是什么?您可以在管理>市场中找到它