Назад к вопросам
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 внутри объекта.