使用Lombok时Checkstyle错误

时间:2015-04-14 12:18:39

标签: java checkstyle lombok

在编译以下使用Lombok自动生成getter和setter的类时,Checkstyle会抛出编译错误:

  

实用程序类不应具有公共或默认构造函数

@Getter
@Setter
public class foo {
    private String type;
    private int value;
}

当Checkstyle不遵循checkstyle's documentation中指定的实用程序类定义时,为什么Checkstyle将上述类分类为实用程序类?即仅包含静态方法或字段的类。 checkstyle是解析默认的源文本文件还是lombok生成的源文件?

3 个答案:

答案 0 :(得分:6)

Checkstyle适用于源代码,它没有看到lombok会生成字节码,所以它看到一个只有两个私有字段的类,它假设你有一个实用程序类。 在该checkstyle的情况下,实用程序类应该有private构造函数,但是您可能不希望这样(您将无法创建此类的实例),因此您需要删除{{ 1}}来自checkstyle规则列表,或添加(请参阅http://checkstyle.sourceforge.net/config_annotation.html#SuppressWarnings#SuppressWarningsHolderHideUtilityClassConstructor

@SuppressWarnings("checkstyle:HideUtilityClassConstructor")

答案 1 :(得分:2)

如果注释不适合您,(由于您正在使用的checkstyle版本),您可以使用

// CHECKSTYLE:SUPPRESS:HideUtilityClassConstructor
@Getter
@Setter
public class Foo {
    private String type;
    private int value;
}
// CHECKSTYLE:UNSUPPRESS:HideUtilityClassConstructor

代替。

答案 2 :(得分:1)

使用checkstyle可以使用一个不错的 XPathSuppressionFilter 。要使用它

添加到您的checkstyle.xml文件

  <!-- externalize the ignored/suppressed checks -->
  <module name="SuppressionFilter">
     <property name="file" value="./checkstyle-suppressions.xml" />
     <property name="optional" value="false" />
  </module>

以及在checkstyle-suppressions.xml中

<!-- disable checks against lombok annotations -->
<suppress-xpath checks="HideUtilityClassConstructor" query="//CLASS_DEF[.//ANNOTATION/IDENT[@text='UtilityClass']]"/>