考虑下面的类
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/