使用龙目岛时的检查样式错误

2022-09-04 01:45:55

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

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

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

为什么 Checkstyle 将上述类归类为实用工具类,而它不遵循 checkstyle 文档中指定的实用工具类定义?即仅包含静态方法或字段的类。checkstyle 是解析默认的源文本文件还是龙目岛生成的源文件?


答案 1

Checkstyle适用于源代码,它没有看到龙目岛会生成字节码,所以它看到一个只有两个私有字段的类,它假设你有一个实用程序类。如果出现该 checkstyle,实用程序类应该有一个构造函数,但你可能不希望这样(你将无法创建这个类的实例),所以你需要的是从 checkstyle 规则列表中删除,或者添加(参见 http://checkstyle.sourceforge.net/config_annotation.html#SuppressWarnings#SuppressWarningsHolder):privateHideUtilityClassConstructor@SuppressWarnings("checkstyle:HideUtilityClassConstructor")

@Getter
@Setter
@SuppressWarnings("checkstyle:HideUtilityClassConstructor")
public class foo {
    private String type;
    private int value;
}

答案 2

使用checkstyle有一个不错的XPathSuppressionFilter。使用它

添加到您的检查样式.xml文件

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

和检查样式抑制.xml

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

推荐