有没有办法用Checkstyle强制枚举类型命名约定?

时间:2013-06-21 08:43:45

标签: java naming-conventions checkstyle

我们希望在项目中强制枚举类型的命名约定以E字母开头(因此枚举应该命名为ETypeEColor等)。

我看到了为接口和类类型强制执行命名约定的方法(使用TypeName rule中的“类声明”和“接口声明”标记。)

有没有办法为枚举做这个?

4 个答案:

答案 0 :(得分:1)

我认为使用checkstyle没有简单的方法可以执行此操作,因此您需要编写自己的检查来执行此操作。

请参阅:Extending Checkstyle - Writing checks

答案 1 :(得分:1)

命名约定集中没有相应的规则。但是你可以使用RegExp检查(正则表达式的explanation)来获得所需的结果:

<module name="Regexp">
    <property name="format" value="\benum\s+\S\S(?&lt;!E[A-Z])[a-zA-Z0-9]+"/>
    <property name="message"
        value="Enums must start with a capital 'E', e.g. EMyEnum"/>
    <property name="illegalPattern" value="true"/>
    <property name="ignoreComments" value="true"/>
</module>

这会忽略注释中的匹配(例如,当枚举声明被注释掉时),并且如果enum关键字和标识符之间存在换行符,则也会起作用。由于enum是Java中的关键字,因此不应该有很多误报。

答案 2 :(得分:0)

据我所知,没有。但您可以定义自己的规则。见http://checkstyle.sourceforge.net/writingchecks.html

答案 3 :(得分:0)

OP现在可以使用ENUM_DEF令牌提及TypeName rule

这样的事情应该有效(基于规则&#39的例子,未经测试):

<module name="TypeName">
    <property name="format" value="^E[A-Z][a-zA-Z0-9]+$"/>
    <property name="tokens" value="ENUM_DEF"/>
</module>