我使用的 Java 代码库具有严格的 Checkstyle检查,它不喜欢以下不可变值对象:
public class Foo {
public final int bar;
public final String baz;
public Foo(int bar, String baz) {
this.bar = bar;
this.baz = baz;
}
}
这是因为 VisibilityModifier模块强制实例变量为 private
并具有 getter。
有没有办法让 Checkstyle 对
public final
的实例变量产生异常?如果是这样,有没有办法让这个异常只适用于测试类?
最佳答案
我不想告诉你这个,我知道这可能不是你所希望的答案,但是:
开箱即用确实是不可能的,因为行为是硬编码在检查中的。摘自 Checkstyle source code :
if (!("private".equals(variableScope)
|| inInterfaceOrAnnotationBlock // implicitly static and final
|| (mods.contains("static") && mods.contains("final"))
|| ("package".equals(variableScope) && isPackageAllowed())
|| ("protected".equals(variableScope) && isProtectedAllowed())
|| ("public".equals(variableScope)
&& getPublicMemberRegexp().matcher(varName).find())))
{
log(varNameAST.getLineNo(), varNameAST.getColumnNo(),
"variable.notPrivate", varName);
}
你必须 write your own check ,可能是 VisibilityModifierCheck
的子类,它覆盖方法 visitToken()
以允许您的异常。
另一方面,如果您的类 Foo
是一个内部类,那么您也可以简单地将这些字段声明为私有(private)的,并且仍然可以从外部类访问它们。一种特殊情况,但通常是 getter 和 setter 特别烦人的情况。
关于java - 启用 VisibilityModifier checkstyle 模块时如何允许不可变类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18851452/