Sobes.tech
Junior — Middle

Hoe maak je een klasse waarvan de objecten niet kunnen worden gewijzigd na initialisatie, terwijl deze een collectie als een van de componenten heeft?

sobes.tech AI

Antwoord van 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; // возвращаем неизменяемый список
    }
}

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