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

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

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

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

sobes.tech AI

Чтобы создать в Java неизменяемый (immutable) класс с коллекцией, нужно:

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

Пример:

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

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

    public ImmutableClass(List<String> items) {
        // Создаем копию коллекции для защиты от внешних изменений
        this.items = Collections.unmodifiableList(List.copyOf(items));
    }

    public List<String> getItems() {
        return items; // возвращаем неизменяемый список
    }
}

Таким образом, после создания объекта изменить его коллекцию нельзя.