Описание
При использовании с полями типа существует потенциальная проблема: при вызове создаётся новый объект, но существующие экземпляры копируются в новый объект со ссылками на оригинальный объект (через лямбды типа this::computeAllModules).
Текущее состояние
На данный момент проблемы нет, так как:
toBuilder() используется только для свежесозданных объектов
- Эти объекты недоступны до завершения операции создания solution
- Внутреннее использование контролируется
Потенциальный риск
Если пользователи библиотеки будут создавать копии объектов вручную с помощью toBuilder(), изменять базовые поля и затем обращаться к lazy-вычисляемым полям, они могут получить некорректные данные, основанные на значениях полей оригинального объекта.
Затронутые классы
Более 30 MDO классов, включая:
- Configuration
- ConfigurationExtension
- ChartOfCharacteristicTypes
- Catalog
- Document
- и другие
Возможные решения (для будущего)
- Реинициализировать
Lazy поля в кастомном билдере после build()
- Переопределить
toBuilder() для сброса инициализации lazy полей
- Сделать методы ленивых вычислений статическими
Контекст
Описание
При использовании с полями типа существует потенциальная проблема: при вызове создаётся новый объект, но существующие экземпляры копируются в новый объект со ссылками на оригинальный объект (через лямбды типа
this::computeAllModules).Текущее состояние
На данный момент проблемы нет, так как:
toBuilder()используется только для свежесозданных объектовПотенциальный риск
Если пользователи библиотеки будут создавать копии объектов вручную с помощью
toBuilder(), изменять базовые поля и затем обращаться к lazy-вычисляемым полям, они могут получить некорректные данные, основанные на значениях полей оригинального объекта.Затронутые классы
Более 30 MDO классов, включая:
Возможные решения (для будущего)
Lazyполя в кастомном билдере послеbuild()toBuilder()для сброса инициализации lazy полейКонтекст