Не возвращайте наружу изменяемые внутренние коллекции. Плохой вариант: ```java public List<String> getMembers() { return members; } Так вызывающий код получает прямой доступ к вашему внутреннему списку. После этого он может сделать: team.getMembers().clear(); И внезапно вся команда исчезла. Не через метод доменной модели, не через проверку прав, не через бизнес-логику, а просто потому что геттер отдал наружу ссылку на mutable state. Нормальный вариант: public List<String> getMembers() { return Collections.unmodifiableList(members); } Или, если нужен безопасный снимок: public List<String> getMembers() { return List.copyOf(members); } Разница важная: * unmodifiableList даёт read-only view поверх текущей коллекции * List.copyOf создаёт неизменяемую копию на момент вызова Это защищает инварианты объекта и оставляет вам свободу менять внутреннюю реализацию. Сегодня внутри может быть ArrayList, завтра Set, послезавтра вообще другая структура. Внешний код не должен зависеть от тог
Java-совет, который кажется мелочью, пока кто-то не сломает вам состояние объекта
9 июня9 июн
2
1 мин