为什么 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。

我建议在 https://github.com/checkstyle/checkstyle/issues

上将此问题报告为一个问题