Назад к задачам
IT OneПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Middle+
6
Как преобразовать обычный класс в неизменяемый объект
Компании, где спрашивали:
Условие задачи
Требуется изменить данный класс так, чтобы его экземпляры стали полностью неизменяемыми. Для этого необходимо:
- убрать все сеттеры;
- объявить поля как
final; - при передаче изменяемых объектов (например, списков) создавать их копии, чтобы внешние изменения не влияли на внутреннее состояние;
- обеспечить безопасный доступ к полям через только геттеры.
Ниже приведён исходный код, который нужно адаптировать к требованиям иммутабельности. Вы можете переименовать переменные, но структура и логика должны остаться прежними.
public class Element {
private final int number;
private final List<String> items;
public Element(int number, List<String> items) {
this.number = number;
// создаём копию списка, чтобы предотвратить внешние модификации
this.items = new ArrayList<>(items);
}
public int getNumber() {
return number;
}
public List<String> getItems() {
// возвращаем неизменяемый вид списка
return Collections.unmodifiableList(items);
}
}
После этих изменений объекты Element будут гарантированно неизменяемыми: их состояние нельзя будет изменить после создания, а любые попытки модифицировать внутренний список приведут к UnsupportedOperationException.