为什么 java 接口常量被 Checkstyle 中的 ConstantName 检查视为非 public
Why are java interface constants treated as non-public by ConstantName check in Checkstyle
在我们的项目中,我们希望确保私有常量始终以 _(下划线)开头,其余的不以下划线开头。
checkstyle 检查 ConstantName 无法将接口常量视为 public 并应用 private 修饰符的规则。
我们在 gradle 项目中使用 checkstyle 8.35 来分析 java 代码(OpenJdk 11、Gradle 6.4)。
下面是Interface with constants的代码片段。
public interface MyInterface() {
int MAX_SIZE = 1024;
//Some methods here
}
ConstantName 检查的检查样式配置如下
<module name="ConstantName">
<property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
<property name="applyToPrivate" value="false"/>
</module>
<module name="ConstantName">
<property name="format" value="^_[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
<property name="applyToPublic" value="false"/>
<property name="applyToProtected" value="false"/>
<property name="applyToPackage" value="false"/>
</module>
Post 运行 checkstyle 分析 MAX_SIZE
的错误报告为 Name 'MAX_SIZE' must match pattern '^_[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'.
而我们的预期是 无错误 .
通过快速扫描 source code 判断,这是一个错误。如果关键字 public
存在(在 类 中是这种情况,而不是接口),他们只考虑常量 public。
上将此问题报告为一个问题
在我们的项目中,我们希望确保私有常量始终以 _(下划线)开头,其余的不以下划线开头。
checkstyle 检查 ConstantName 无法将接口常量视为 public 并应用 private 修饰符的规则。
我们在 gradle 项目中使用 checkstyle 8.35 来分析 java 代码(OpenJdk 11、Gradle 6.4)。
下面是Interface with constants的代码片段。
public interface MyInterface() {
int MAX_SIZE = 1024;
//Some methods here
}
ConstantName 检查的检查样式配置如下
<module name="ConstantName">
<property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
<property name="applyToPrivate" value="false"/>
</module>
<module name="ConstantName">
<property name="format" value="^_[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
<property name="applyToPublic" value="false"/>
<property name="applyToProtected" value="false"/>
<property name="applyToPackage" value="false"/>
</module>
Post 运行 checkstyle 分析 MAX_SIZE
的错误报告为 Name 'MAX_SIZE' must match pattern '^_[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'.
而我们的预期是 无错误 .
通过快速扫描 source code 判断,这是一个错误。如果关键字 public
存在(在 类 中是这种情况,而不是接口),他们只考虑常量 public。