Maven checkstyle插件给出“参数应该是最终的”错误,甚至修改了s

时间:2017-06-29 04:17:51

标签: java maven checkstyle

我们正在使用maven checkstyle插件。下面是pom.xml配置。

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>2.17</version>
    <configuration>
        <configLocation>sun_checks.xml</configLocation> 
        <encoding>UTF-8</encoding>
        <consoleOutput>true</consoleOutput>
        <logViolationsToConsole>true</logViolationsToConsole>
        <failsOnError>true</failsOnError>
        <failOnViolation>true</failOnViolation>
        <violationSeverity>error</violationSeverity>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>com.puppycrawl.tools</groupId>
            <artifactId>checkstyle</artifactId>
            <version>7.8.1</version>
        </dependency>
    </dependencies>  
    <executions>
        <execution>
        <phase>validate</phase>
        <goals>
        <goal>check</goal>
        </goals>
        </execution>
    </executions> 
</plugin> 

我们有以下java代码。

package com.comp.teststyleguide;

public class A {

  public A(String s) {
    s = "test1";

  }

}

现在,mvn clean package给出了以下控制台消息。

  

[ERROR]   /work/checkstyle/teststyleguide/src/main/java/com/comp/teststyleguide/A.java:5:12:   参数s应该是最终的。 [FinalParameters]

2 个答案:

答案 0 :(得分:2)

你不应该重新分配参数。

对于您不想制作参数final的情况,Checkstyle有一个单独的ParameterAssignmentCheck

来自JavaDoc:

  

禁止分配参数。

     

理由:参数分配通常被认为是编程不佳   实践。强制开发人员经常将参数声明为final   繁重。检查确保从未分配参数   会给两个世界带来最好的效果。

答案 1 :(得分:2)

在方法中重新分配方法参数值不是一个好的编程习惯,

  

检查方法,构造函数和catch块的参数是否为   最后。不检查接口,抽象和本机方法:   final关键字对于接口,抽象和本机没有意义   方法参数,因为没有可以修改参数的代码。

     

基本原理:在执行期间更改参数值   该方法的算法可能令人困惑,应该避免。一个伟大的   让Java编译器阻止这种编码风格的方法是声明   参数final。

您可以在checkstyle文档中找到更多信息。 http://checkstyle.sourceforge.net/config_misc.html#FinalParameters