Intellij静态最终集合检查

时间:2018-09-20 12:30:01

标签: java intellij-idea

我正在寻找IntelliJ检查,但找不到。

如果您采用以下代码段,则该代码段应为常量,但并非一成不变。

private static final Set<MyEventType> TYPES = EnumSet.of(MyEventType.APPROVED,MyEventType.REJECTED); 

执行以下操作是完全有效的。

TYPES.add(MyEventType.CANCELED);

那么有IntelliJ检查是否可以给mi警告我的收藏品是不可变的。通常,这就是您想要的静态最终字段。

这将是正确的代码:

private static final Set<MyEventType> TYPES =  Collections.unmodifiableSet(EnumSet.of(MyEventType.APPROVED,MyEventType.REJECTED)); 

2 个答案:

答案 0 :(得分:0)

相关检查是“设置”>“编辑器”>“检查”>“ Java”>“命名约定”>具有大写名称的非常​​数字段。

以上确实是所有错误。刚好您希望该集不可修改,但是EnumSet.of已被完整记录为返回可修改集。 “常量”的约定是字段本身是常量,而不是引用的对象(例如,比较使用LOGGER作为字段名称:记录器引用是常量,但可以修改记录器实例)。 Intellij IDEA(据我所知;可能会纠正)没有检查使用大写的字段名作为可修改对象。

答案 1 :(得分:0)

IntelliJ已经可以识别在不可变集合上调用add的情况:

private final Set<SessionServerState> ALL_STATES = Collections.unmodifiableSet(EnumSet.allOf(SessionServerState.class));

ALL_STATES.add(...);

enter image description here

如果您扩展此工具提示,它来自Constant conditions & exceptions检查。

enter image description here