Назад к задачам
Junior — Middle+
6

Как преобразовать обычный класс в неизменяемый объект

Компании, где спрашивали:

IT OneIT One
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Требуется изменить данный класс так, чтобы его экземпляры стали полностью неизменяемыми. Для этого необходимо:

  • убрать все сеттеры;
  • объявить поля как 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.