Intellij статическая итоговая проверка коллекции - PullRequest
0 голосов
/ 20 сентября 2018

Я искал проверку IntelliJ, но не смог ее найти.

Если вы возьмете фрагмент кода ниже, он должен быть константой, но он не является неизменным.

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

вполне допустимо сделать следующее.

TYPES.add(MyEventType.CANCELED);

Так есть проверка IntelliJ, которая дала бы мне предупреждение, что моя коллекция не является неизменной.Обычно это то, что вы хотите со статическими конечными полями.

Это будет правильный код:

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

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

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

0 голосов
/ 20 сентября 2018

Соответствующей проверкой являются Настройки> Редактор> Проверки> Java> Соглашения об именах> Непостоянное поле с заглавными буквами.

Это действительно все, что не так с вышеприведенным.Случается, что вы намеревались установить набор как неизменяемый, но EnumSet.of полностью задокументировано, чтобы вернуть изменяемый набор.Соглашение для «констант» заключается в том, что само поле является константой, а не объектом, на который ссылаются (сравните, например, использование LOGGER в качестве имени поля: ссылка на регистратор постоянна, но экземпляр регистратора можно изменить).Intellij IDEA не (насколько я знаю; я могу быть исправлен) не проверяет использование имен полей в верхнем регистре для изменяемых объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...