3

我使用具有严格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;
    }
}

这是因为VisibilityModifier模块强制实例变量成为private并具有 getter。

  1. 有没有办法让 Checkstyle 为实例变量例外public final

  2. 如果是这样,有没有办法让这个例外只适用于测试类?

4

1 回答 1

1

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

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

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);
}

您必须编写自己的 check,可能作为子类VisibilityModifierCheck覆盖该方法visitToken()以允许您的异常。

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

于 2013-09-17T20:42:50.130 回答