考虑以下课程
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
答案 0 :(得分:1)
这确实是误报。 SonarJava当前无法支持这种情况,在语义引擎中,类之间的继承关系只能从子类计算到父类。
已创建以下JIRA票证来处理它:SONARJAVA-2818