Sobes.tech
Junior — Middle

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

sobes.tech AI

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

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