当子类将其声明为最终值时,SonarQube无法看到覆盖的相等值

时间:2018-07-06 16:24:48

标签: java sonarqube

考虑以下课程

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

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

由于C是最终的,因此SonarQube分析未能看到equals类的A被覆盖的C::equals方法。

导致以下违规的原因:

  

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

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

这不是一个错误吗?

SonarJava 5.4

1 个答案:

答案 0 :(得分:1)

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

已创建以下JIRA票证来处理它:SONARJAVA-2818