Class FinalParametersCheck

  • All Implemented Interfaces:
    Configurable, Contextualizable

    public class FinalParametersCheck
    extends AbstractCheck

    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.

    • Property ignorePrimitiveTypes - Ignore primitive types as parameters. Type is boolean. Default value is false.
    • Property tokens - tokens to check Type is java.lang.String[]. Validation type is tokenSet. Default value is: METHOD_DEF, CTOR_DEF.

    To configure the check to enforce final parameters for methods and constructors:

     <module name="FinalParameters"/>
     

    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="FinalParameters">
       <property name="tokens" value="CTOR_DEF"/>
     </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="FinalParameters">
       <property name="ignorePrimitiveTypes" value="true"/>
     </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
     }
     

    Parent is com.puppycrawl.tools.checkstyle.TreeWalker

    Violation Message Keys:

    • final.parameter
    Since:
    3.0