SonarQube提示Remove this unused method parameter解决方案

625 阅读2分钟

问题

在实际进行Code Review时,经常发现在Sonar扫描后,会有一个Remove this unused method parameter的issue出现,对于此类问题被定义为MAJOR级别的问题。类似于如下截图只展示。

image.png

何时出现此问题

Sonar在什么情况下会提示Remove this unused method parameter的issue呢?比较常见的有两种:

  1. 本身方法参数的确没有被使用。
  2. 方法被定义在abstract类中,并且此方法会在抽象类中有一个默认的使用,但是默认使用并不使用此参数。

除了以上场景外,还有其他的几种场景:

  1. @javax.enterprise.event.Observes 注释的
  2. 在覆盖和实现方法中
  3. 在接口默认方法中
  4. 在仅抛出或具有空主体的非私有方法中
  5. 在注解的方法中,除非注解是@SuppressWarning("unchecked")@SuppressWarning("rawtypes"),在这种情况下注解将被忽略
  6. 在可覆盖的方法中(非最终的,或不是最终类的成员,非静态,非私有),如果参数是用适当的 javadoc 记录的。

如何解决

对于确实没有使用的方法参数,直接修改后移除即可,但是对于其他的场景,如何解决呢?可以有如下几种解决方法。

使用Override注解

@Override
void doSomething(int a, int b) {     // no issue reported on b
  compute(a);
}

public空方法增加注释

public void foo(String s) {
  // designed to be extended but noop in standard case
}

protected控制访问权限

protected void bar(String s) {
  //open-closed principle
}

抛出异常

public void qix(String s) {
  throw new UnsupportedOperationException("This method should be implemented in subclasses");
}

增加参数注释

/**
 * @param s This string may be use for further computation in overriding classes
 */
protected void foobar(int a, String s) { // no issue, method is overridable and unused parameter has proper javadoc
  compute(a);
}

解决问题

使用以上解决方案后,sonar提示的Remove this unused method parameter问题得到修复。 image.png

总结

很多时候在遇到问题时,很多人会选择性的忽略,原因是觉得没有办法解决,但是这样的做法是不可取的。对于每一个小的细节问题,最好都能够有一个深入的探究,并尝试尽量解决这个问题,在此过程中会有很大的收获。

参考文献