在编译以下使用Lombok自动生成getter和setter的类时,Checkstyle会抛出编译错误:
实用程序类不应具有公共或默认构造函数
@Getter
@Setter
public class foo {
private String type;
private int value;
}
当Checkstyle不遵循checkstyle's documentation中指定的实用程序类定义时,为什么Checkstyle将上述类分类为实用程序类?即仅包含静态方法或字段的类。 checkstyle是解析默认的源文本文件还是lombok生成的源文件?
答案 0 :(得分:6)
Checkstyle适用于源代码,它没有看到lombok会生成字节码,所以它看到一个只有两个私有字段的类,它假设你有一个实用程序类。
在该checkstyle的情况下,实用程序类应该有private
构造函数,但是您可能不希望这样(您将无法创建此类的实例),因此您需要删除{{ 1}}来自checkstyle规则列表,或添加(请参阅http://checkstyle.sourceforge.net/config_annotation.html#SuppressWarnings#SuppressWarningsHolder)HideUtilityClassConstructor
:
@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']]"/>