Unused parameters are misleading. Whatever the values passed to such parameters, the behavior will be the same.
Noncompliant Code Example
void doSomething(int a, int b) { // "b" is unused
compute(a);
}
Compliant Solution
void doSomething(int a) {
compute(a);
}
Exceptions
The rule will not raise issues for unused parameters:
- that are annotated with
@javax.enterprise.event.Observes
- in overrides and implementation methods
- in interface
default
methods
- in non-private methods that only
throw
or that have empty bodies
- in annotated methods, unless the annotation is
@SuppressWarning("unchecked")
or @SuppressWarning("rawtypes")
, in
which case the annotation will be ignored
- in overridable methods (non-final, or not member of a final class, non-static, non-private), if the parameter is documented with a proper
javadoc.
@Override
void doSomething(int a, int b) { // no issue reported on b
compute(a);
}
public void foo(String s) {
// designed to be extended but noop in standard case
}
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);
}
See
- CERT, MSC12-C. - Detect and remove code that has no effect or is never executed