Sobes.tech
Junior — Middle
128

Comment créer une classe dont les objets ne peuvent pas être modifiés après l'initialisation, tout en ayant une collection comme l'un de ses composants?

Entreprises à qui on a demandé
ИннотехИннотех
AstonAston

Réponse de l'IA

sobes.tech IA

Чтобы создать в 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; // возвращаем неизменяемый список
    }
}

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