Sobes.tech
Junior — Middle
120

Kaip sukurti klasę, kurios objektai negali būti pakeisti po inicializacijos, ir kurioje yra kolekcija kaip vienas iš jos komponentų?

Įmonės kur klausė
ИннотехИннотех
AstonAston

Atsakymas iš AI

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

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