Это должна быть Java 101, но я не могу понять, почему я не могу использовать прямой доступ к полю и почему я вынужден использовать геттеры в конструкторе копирования.
У меня есть куча сущностей. Они организованы как дерево. Связанные объекты выбираются с нетерпением.
Я использую Hibernate, Lombok и IntelliJ для отладчика.
Когда я беру одно из деревьев сущностей за корень, я получаю дерево объектов. Давайте назовем это «оригинал». По какой-то причине, связанной с бизнес-требованиями, мне нужно скопировать его (назовем это «копией»). Я делаю это используя конструктор копирования.
Сначала я написал версию конструктора копирования с использованием прямого доступа к полю.
this.someField= original.someField
Это не сработало. Когда я проверил отладчик, я увидел, что original.someField (как и другие поля) всегда были нулевыми.
Тем не менее, он работает с использованием геттеров.
this.setSomeField(original.getSomeField())
В отладчике я вижу, что поля «установлены» в original.handler.target. (Я понятия не имею, что такое handler.target).
Может ли кто-нибудь объяснить мне, почему прямой доступ к полю не работает?
(Я спрашиваю о технической причине, а не о философской, такой как «всегда следует использовать добытчики» и т. Д.).
Я также был бы рад узнать, что такое "handler.target".
Заранее спасибо.