4

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

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

有没有办法为枚举做到这一点?

4

4 回答 4

1

我认为使用 checkstyle 没有简单的方法可以做到这一点,所以你需要编写自己的支票来做到这一点。

请参阅:扩展 Checkstyle - 编写检查

于 2013-06-21T08:51:27.573 回答
1

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

<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中的关键字,因此应该不会有很多误报。

于 2013-06-21T11:48:33.483 回答
0

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

于 2013-06-21T08:51:18.797 回答
0

现在可以使用 OP 提到的TypeName 规则ENUM_DEF,使用令牌。

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

<module name="TypeName">
    <property name="format" value="^E[A-Z][a-zA-Z0-9]+$"/>
    <property name="tokens" value="ENUM_DEF"/>
</module>
于 2017-05-04T08:32:57.513 回答