Since Checkstyle 3.0
Checks that parameters for methods, constructors, catch and for-each blocks are final. Interface, abstract, and native methods are not checked: the final keyword does not make sense for interface, abstract, and native method parameters as there is no code that could modify the parameter.
Rationale: Changing the value of parameters during the execution of the method's algorithm can be confusing and should be avoided. A great way to let the Java compiler prevent this coding style is to declare parameters final.
| name | description | type | default value | since |
|---|---|---|---|---|
| ignorePrimitiveTypes | Ignore primitive types as parameters. | boolean | false |
6.2 |
| tokens | tokens to check | subset of tokens METHOD_DEF , CTOR_DEF , LITERAL_CATCH , FOR_EACH_CLAUSE . | METHOD_DEF , CTOR_DEF . | 3.0 |
To configure the check to enforce final parameters for methods and constructors:
<module name="Checker">
<module name="TreeWalker">
<module name="FinalParameters"/>
</module>
</module>
Example:
public class Point {
public Point() { } // ok
public Point(final int m) { } // ok
public Point(final int m,int n) { } // violation, n should be final
public void methodOne(final int x) { } // ok
public void methodTwo(int x) { } // violation, x should be final
public static void main(String[] args) { } // violation, args should be final
}
To configure the check to enforce final parameters only for constructors:
<module name="Checker">
<module name="TreeWalker">
<module name="FinalParameters">
<property name="tokens" value="CTOR_DEF"/>
</module>
</module>
</module>
Example:
public class Point {
public Point() { } // ok
public Point(final int m) { } // ok
public Point(final int m,int n) { } // violation, n should be final
public void methodOne(final int x) { } // ok
public void methodTwo(int x) { } // ok
public static void main(String[] args) { } // ok
}
To configure the check to allow ignoring primitive datatypes as parameters:
<module name="Checker">
<module name="TreeWalker">
<module name="FinalParameters">
<property name="ignorePrimitiveTypes" value="true"/>
</module>
</module>
</module>
Example:
public class Point {
public Point() { } // ok
public Point(final int m) { } // ok
public Point(final int m,int n) { } // ok
public void methodOne(final int x) { } // ok
public void methodTwo(int x) { } // ok
public static void main(String[] args) { } // violation, args should be final
}
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
com.puppycrawl.tools.checkstyle.checks