避免重写方法仅调用多继承中超类Sonar违例中定义的相同方法

时间:2014-09-12 14:35:38

标签: java sonarqube pmd

我有一个类让我们说BImpl实现B接口和C抽象类。这两个超类都有一些像doSomething()这样的方法,它们在抽象类C中实现。

interface B
{
 Some doSomething();
}

abstract class C
{
 protected Some doSomething()
 {
   //Do something here...
 }
}

我按如下方式实现BImpl:

class BImpl extends C implemensts B
{
  public Some doSomething()
  {
    super.doSomething()
  }
}

所以我用B类型对象公开抽象类行为。在这种情况下,我得到PMD(声纳中)违规,说"覆盖方法只调用超类中定义的相同方法"。 这对我来说是不对的,因为我暴露了其他父母的行为。我怎么能避免这个?

4 个答案:

答案 0 :(得分:2)

这是此PMD规则的known limitation以及相关的Squid(SonarQube内部)规则。请在下一版Java插件中随意投票解决此问题。

答案 1 :(得分:2)

1)看起来你错过了输入的实现。它应该如下所示:

class BImpl extends C implements B
{
  public Some doSomething()
  {
    super.doSomething()
  }
}

因为类不能扩展接口或实现抽象类。

2)根据我对你的问题的理解,BImpl中doSomething()的实现是多余的。

Class BImpl extends C implements B {

}

在逻辑上等同于上述实现。 这就是SONAR发出违规行为的原因。 好吧,如果BImpl中的doSomething()具有与抽象类不同的逻辑。我不认为SONAR会给出任何违规行为,因为没有多余的逻辑。

答案 2 :(得分:1)

如果您不同意一些没有错误的声纳规则,默认配置文件中的某些规则不仅仅是可论证的,只需禁用您用于分析项目的配置文件,违规将在消失后消失接下来分析。

答案 3 :(得分:0)

只是一个想法,类型转换?

public Some doSomething(){
  ((B)this).doSomething()
}