Предупреждение о возвращении поля коллекции - сеттеры и конструкторы

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

Другие вопросы по тегам