Sobes.tech
Назад к вопросам
Junior — Middle
63

Каким образом можно обеспечить неизменяемость объекта класса, содержащего список в качестве поля?

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

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

sobes.tech AI

Чтобы обеспечить неизменяемость объекта класса с полем-списком в Java, нужно:

  1. Сделать класс final или не предоставлять методы, изменяющие состояние.
  2. Сделать поле списка private final.
  3. При инициализации копировать переданный список (например, через new ArrayList<>(list)), чтобы избежать внешних изменений.
  4. Возвращать из геттеров либо копию списка, либо использовать Collections.unmodifiableList() для предоставления только для чтения.

Пример:

import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

public final class ImmutableClass {
    private final List<String> items;

    public ImmutableClass(List<String> items) {
        this.items = Collections.unmodifiableList(new ArrayList<>(items));
    }

    public List<String> getItems() {
        return items; // нельзя изменить, т.к. unmodifiableList
    }
}

Таким образом, внутренний список нельзя изменить извне, и объект остается неизменяемым.