Назад к вопросам
Junior
74
questionbank

Чем обеспечивается иммутабельность в Java?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Иммутабельность в Java обеспечивается следующими способами:

  1. Объявление класса как final: Класс нельзя наследовать, что предотвращает создание мутабельных подклассов.

  2. Объявление всех полей как final: Значение поля может быть присвоено только один раз (при инициализации или в конструкторе) и не может быть изменено после создания объекта.

  3. Приватность полей: Поля должны быть приватными (private), чтобы исключить прямой доступ и изменение значений извне класса.

  4. Отсутствие сеттеров или методов, изменяющих состояние объекта: Класс не должен предоставлять публичных методов, которые могут изменить значение полей объекта после его создания.

  5. Правильное обращение с мутабельными полями: Если класс содержит ссылки на мутабельные объекты (например, List или собственный мутабельный класс), необходимо:

    • Создавать их копии при инициализации (в конструкторе).
    • Возвращать их копии в геттерах, чтобы избежать изменения внутренних состояний объекта извне.
public final class ImmutableExample { // final класс

    private final String name; // final и private поле

    private final List<String> items; // final и private поле

    public ImmutableExample(String name, List<String> items) {
        this.name = name;
        // Создание защищенной копии мутабельного списка
        this.items = new ArrayList<>(items);
    }

    public String getName() {
        return name;
    }

    public List<String> getItems() {
        // Возврат защищенной копии мутабельного списка
        return Collections.unmodifiableList(new ArrayList<>(items));
    }

    // Отсутствие сеттеров или методов, изменяющих состояние
}

Примеры встроенных иммутабельных классов в Java: String, классы-обертки примитивов (Integer, Long, etc.), BigInteger, BigDecimal.