Возможно ли создать экземпляр объекта в Java без вызова конструктора?
Я пытаюсь исправить ошибку в одной из моих программ, которая, как мне кажется, может быть вызвана тем, что Hibernate выясняет, как создать экземпляр объекта без вызова его конструктора по умолчанию (или любого другого).
Ответы
Ответ 1
На самом деле, да, можно обойти конструктор, когда вы создаете экземпляр объекта, если вы используете objenesis для создания экземпляра объекта для вы. Для достижения этой цели используются байт-коды.
десериализация объекта будет также обходить конструктор.
Это невозможно сделать с помощью отражения.
Ответ 2
Только для завершения изображения: с помощью метода clone
для создания нового объекта также обходят конструкторы.
Ответ 3
Да, десериализация объекта не вызывает его конструктор.
Тем не менее, я не понимаю, почему спящий режим будет сериализовать объект, если, возможно, в кэше второго уровня.
Ответ 4
Десериализация включает создание объектов без вызова конструктора.
Это возможно (по крайней мере, с помощью Sun/Oracle JDK) сделать это программно. Это было описано в "Создание объектов без вызывающих конструкторов" , издание The Java Specialists 'Newsletter. В нем задействованы классы из пакетов sun.*
, поэтому они не переносимы.