Предупреждение о возвращении поля коллекции - сеттеры и конструкторы
IntelliJ предупреждает меня о "Возвращении поля сбора", если я делаю что-то вроде
private List<String> myList;
public List<String> getMyList() {
return myList;
}
Описание кода проверки состояния:
Сообщает о любой попытке вернуть массив или поле коллекции из метода. Поскольку содержимое массива или коллекции может быть изменено вызывающим методом, эта конструкция может привести к неожиданному изменению состояния объекта. Хотя это иногда полезно для повышения производительности, эта конструкция по своей природе подвержена ошибкам.
Я полностью понимаю проблемы, но мне интересно, почему меня не предупреждают о том, чтобы делать то же самое для сеттеров и конструкторов
public MyListClass (List<String> myList) {
this.myList = myList;
}
public void setMyList (List<String> myList) {
this.myList = myList;
}
который, я думаю, может привести к тем же проблемам.
Разве я не должен создавать новые Коллекции для получения и настройки Коллекции? Так что не только
return new ArrayList<String>(this.myList);
но также
this.myList = new ArrayList<String>(myList);
(В этом примере игнорируется создание возвращаемых списков неизменяемыми или проверка на нулевое значение)
2 ответа
Вы можете использовать Java | Assignment issues | Assignment to Collection or array field from parameter
проверка, чтобы получать предупреждения в установщиках и конструкторах тоже.
Я считаю, что это только для продвижения стандартных методов кодирования.
Вышеупомянутое предупреждение заставит разработчика иметь неизменные коллекции внутри класса.
Вы можете спокойно проигнорировать это предупреждение или, в качестве альтернативы, можете отменить проверку.
Вы можете прочитать об этом здесь: https://www.jetbrains.com/help/idea/2016.2/suppressing-inspections.html