Checkstyle ConstantName 规则适用于并非真正常量的事物

Checkstyle ConstantName rule kicks in for things that are not really constant

我想检查我的字段名称是否仅对符合我首选的“常量”定义的字段使用大写字母,如 Google's Java Coding Guidelines 中所述。

因此:

private static final integer NUM = 1974;  // is a constant
private static final String NAME = "Freddie"  // is a constant

private static final Map<String, String> myMap = new HashMap<>();  // is NOT a constant
private static final Logger myLogger = LogManager.getLogger();  // is NOT a constant

是否可以指定一个规则,仅当类型是原始类型或对字符串或其他 不可变 class 的最终引用时才需要大写命名?

不是真的。 Checkstyle 必须执行代码。例如,private static final Map<String, String> myMap = Map.of("One", "Blue", "Two", "Red"); 是一个不可变值。

您可以做的一件事是告诉 Checkstyle 它不应该对私有字段强制执行命名方案:

<module name="ConstantName">
    <property name="applyToPrivate" value="false"/>
</module>

另一个选项是指定允许的名称:

<module name="ConstantName">
    <property name="format"
        value="^([A-Z][A-Z0-9]*(_[A-Z0-9]+)*|myMap|myLogger)$"/>
</module>