【问题标题】:Checkstyle ConstantName rule kicks in for things that are not really constantCheckstyle ConstantName 规则适用于并非真正恒定的事物
【发布时间】:2020-11-23 18:49:29
【问题描述】:

我想检查我的字段名称是否仅适用于符合我首选的“常量”定义的字段,如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

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

【问题讨论】:

    标签: java checkstyle


    【解决方案1】:

    不是真的。 Checkstyle 必须执行代码。例如,private static final Map&lt;String, String&gt; 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>
    

    【讨论】:

    • 谢谢。这可能是我们目前能做的最好的事情了。在接受你的答案之前,我会等着看是否还有其他答案。如果 checkstyle 至少能识别一些众所周知的不可变类并将其视为常量并且在不确定类是否不可变时不应用该规则,那就太好了。尤其是考虑到 Google 编码指南和许多其他流行指南对“常量”的定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 2013-08-17
    • 2011-03-08
    相关资源
    最近更新 更多