Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当VisibilityModifier checkstyle模块启用时,如何允许不可变类?_Java_Coding Style_Immutability_Verification_Checkstyle - Fatal编程技术网

Java 当VisibilityModifier checkstyle模块启用时,如何允许不可变类?

Java 当VisibilityModifier checkstyle模块启用时,如何允许不可变类?,java,coding-style,immutability,verification,checkstyle,Java,Coding Style,Immutability,Verification,Checkstyle,我使用具有严格检查的Java代码库,它不喜欢以下不可变值对象: public class Foo { public final int bar; public final String baz; public Foo(int bar, String baz) { this.bar = bar; this.baz = baz; } } 这是因为模块强制实例变量为private,并具有getter 是否有办法使Checkstyle对

我使用具有严格检查的Java代码库,它不喜欢以下不可变值对象:

public class Foo {
    public final int bar;
    public final String baz;

    public Foo(int bar, String baz) {
        this.bar = bar;
        this.baz = baz;
    }
}
这是因为模块强制实例变量为
private
,并具有getter

  • 是否有办法使Checkstyle对
    公共final
    的实例变量例外

  • 如果是的话,有没有办法使这个异常只适用于测试类


  • 我不想告诉你,我知道这可能不是你所希望的答案,但是:

    这确实是不可能开箱即用的,因为行为是在检查中硬编码的。摘自Checkstyle:

    if(!(“private”.equals(variableScope)
    ||inInterfaceOrAnnotationBlock//隐式静态和最终
    ||(模块包含(“静态”)和模块包含(“最终”))
    ||(“package.equals(variableScope)&&isPackageAllowed())
    ||(“protected”.equals(variableScope)&&isProtectedAllowed())
    ||(“公共”。等于(可变范围)
    &&getPublicMemberRegexp().matcher(varName.find())
    {
    日志(varNameAST.getLineNo(),varNameAST.getColumnNo(),
    “variable.notPrivate”,varName);
    }
    
    您可能需要作为
    VisibilityModifierCheck
    的子类,该类重写方法
    visitToken()
    ,以允许您的异常


    另一方面,如果您的类
    Foo
    是一个内部类,那么您也可以简单地将字段声明为private,并仍然从外部类访问它们。这是一种特殊情况,但通常情况下,getter和setter特别令人讨厌。

    最终成员可以是公开的,这是有道理的。如果我是你,我会尝试联系Checkstyle开发人员并询问他们,也许他们会在下一个版本中更改它,或者至少添加一个属性。这与你要求的不完全一样,但是你可以在每个类上面添加
    //Checkstyle\u OFF:Visibility
    ,这样可以让Checkstyle停止抱怨。我不知道有哪种设置可以有条件地应用该规则。我通常认为您不希望这样。即使字段是最终字段,您仍然会公开对象的内部结构,这将永远限制您未来的重构选项。但这是另一种讨论。:-)@托马斯:这是一个常见的误解,是的:)