Sobes.tech
Senior
54

Kaip apsaugoti nuo vidinio sąrašo mutacijos per išorinį nuorodą (gynimo kopija konstruktoriuje)?

Įmonės kur klausė
РТЛабс

Atsakymas iš AI

sobes.tech AI

Чтобы защититься от мутации внутреннего списка через внешнюю ссылку, в конструкторе нужно создать защитную копию (defensive copy) перед сохранением списка в поле класса. Это значит, что вместо сохранения ссылки на переданный список, создаётся новый список с теми же элементами. Таким образом, изменения внешнего списка после создания объекта не повлияют на внутреннее состояние объекта.

Пример на Java:

public class MyClass {
    private final List<String> internalList;

    public MyClass(List<String> inputList) {
        // Создаем копию списка, чтобы защититься от внешних изменений
        this.internalList = new ArrayList<>(inputList);
    }

    public List<String> getList() {
        // Можно также возвращать копию, чтобы защититься от изменений извне
        return new ArrayList<>(internalList);
    }
}

Таким образом, любые изменения, сделанные снаружи на inputList после создания объекта, не повлияют на internalList внутри объекта.