Проверяет понимание принципов неизменяемости (immutability) в Java и правильного возврата коллекций из immutable класса.
Immutable (неизменяемый) класс — это класс, экземпляр которого нельзя изменить после создания. Все поля такого класса должны быть final, а сам класс — объявлен как final или иметь приватные конструкторы. Однако просто сделать поле коллекции final недостаточно: если getter возвращает прямую ссылку на этот список, внешний код может вызвать list.add(...) и изменить внутреннее состояние объекта.
Есть два основных подхода:
public final class ImmutablePerson {
private final String name;
private final List<String> hobbies;
public ImmutablePerson(String name, List<String> hobbies) {
this.name = name;
// Защитная копия на входе
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public List<String> getHobbies() {
// Возвращаем неизменяемую обёртку
return Collections.unmodifiableList(hobbies);
}
}При возврате коллекций из immutable класса всегда используйте либо неизменяемую обёртку, либо защитную копию. Это сохраняет контракт неизменяемости и предотвращает случайное или намеренное изменение внутреннего состояния объекта.