Sobes.tech
Назад к вопросам
Senior
6

Как защититься от мутации внутреннего списка через внешнюю ссылку (defensive copy в конструкторе)?

Компании, где спрашивали
РТЛабс

Ответ от нейросети

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 внутри объекта.