首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Checkstyle不允许特定的枚举常量

Checkstyle不允许特定的枚举常量
EN

Stack Overflow用户
提问于 2022-01-21 12:26:47
回答 1查看 93关注 0票数 1

是否有一种方法可以使用校验样式来不允许使用特定的枚举值(除了试图用正则表达式捕获它)?

我想阻止javax.persistence.CascadeType.ALL的使用,但似乎只能找到防止使用整个javax.persistence.CascadeType枚举的选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-30 07:34:05

这不是那么容易,但有几种方法(或解决办法?)

  1. 您可以使用MatchXPathCheck报告与CascadeType.ALL的任何用法的冲突。配置如下所示
代码语言:javascript
代码运行次数:0
运行
复制
<!-- under TreeWalker -->
<module name="MatchXpath">
    <property name="query" value="//DOT[count(./IDENT) = 2 and ./*[1][@text = 'CascadeType'] and ./*[2][@text = 'ALL']]"/>
    <message key="matchxpath.match"
             value="Do not use Cascade.ALL"/>
</module>

它将报告违反CascadeType.ALL的任何使用,不包括进口。但是,如果您直接使用静态导入和常量,它将无法工作。

代码语言:javascript
代码运行次数:0
运行
复制
import static javax.persistence.CascadeType.ALL;

Object a = ALL; // we wont catch it
  1. 其他方式是其他xpath,但禁止使用ALL
代码语言:javascript
代码运行次数:0
运行
复制
<!-- under TreeWalker -->
<module name="MatchXpath">
    <property name="query" value="//IDENT[@text = 'ALL']"/>
    <message key="matchxpath.match"
        value="Do not use CascadeType.ALL"/>
</module>

这将捕获所有的用法(导入也是如此),但是如果您有其他名为ALL的常量,则会产生假阳性,因为这里我们没有指定它的类型。

  1. 要禁止静态导入,可以使用IllegalImportCheck。它将报告类似案件的违规行为。
代码语言:javascript
代码运行次数:0
运行
复制
import static javax.persistence.CascadeType.ALL;

但如果有明星进口的话,这是行不通的。

您还可以尝试组合这些方法或创建更好的xpath,因为上面的只是一个草图。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70801277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档