问题
在实际进行Code Review时,经常发现在Sonar扫描后,会有一个Remove this unused method parameter的issue出现,对于此类问题被定义为MAJOR级别的问题。类似于如下截图只展示。
何时出现此问题
Sonar在什么情况下会提示Remove this unused method parameter的issue呢?比较常见的有两种:
- 本身方法参数的确没有被使用。
- 方法被定义在
abstract类中,并且此方法会在抽象类中有一个默认的使用,但是默认使用并不使用此参数。
除了以上场景外,还有其他的几种场景:
- 用
@javax.enterprise.event.Observes注释的 - 在覆盖和实现方法中
- 在接口默认方法中
- 在仅抛出或具有空主体的非私有方法中
- 在注解的方法中,除非注解是
@SuppressWarning("unchecked")或@SuppressWarning("rawtypes"),在这种情况下注解将被忽略 - 在可覆盖的方法中(非最终的,或不是最终类的成员,非静态,非私有),如果参数是用适当的
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问题得到修复。
总结
很多时候在遇到问题时,很多人会选择性的忽略,原因是觉得没有办法解决,但是这样的做法是不可取的。对于每一个小的细节问题,最好都能够有一个深入的探究,并尝试尽量解决这个问题,在此过程中会有很大的收获。