2010-08-15 3 views
17

Я пытаюсь исправить ошибку в одной из моих программ, которые, я думаю, может быть вызвано тем, что Hibernate выясняет, как создать экземпляр объекта без вызова его конструктора по умолчанию (или любого другого).Возможно ли создать экземпляр объекта в Java без вызова конструктора?

+3

Возможно, вы должны опубликовать исходную проблему, а не предполагаемое решение. –

+2

Hibernate использует пустой конструктор объектов по умолчанию. Ты ошибаешься. Отправьте свою проблему вместо этого. –

ответ

23

На самом деле, да, вы можете обойти конструктор, когда вы создаете экземпляр объекта, если вы используете objenesis для создания объекта для вас. Для достижения этой цели используются байт-коды.

Десализирующий объект также обходит конструктор.

Невозможно это сделать используя отражение.

7

Да, десериализация объекта не вызывает его конструктор.

Это не означает, почему спящий режим будет сериализовать объект, если, возможно, в кэше второго уровня.

6

Deserialization включает создание объектов без вызова конструктора.

Это возможно (по крайней мере, с помощью Sun/Oracle JDK) для этого программно. Это было рассмотрено в "Creating Objects Without Calling Constructors", издание The Java Specialists' Newsletter.. Он включает в себя использование классов из пакетов sun.*, поэтому он не переносится.

8

Просто для завершения изображения: используя метод clone, чтобы создать новый объект, также обходим конструкторы.

+0

При условии, что клон() правильно реализован, конечно. Можно переопределить клон в качестве заводского метода, не используя super.clone(). (В то время как super.clone() следует использовать, а не конструктор) – DerMike

Смежные вопросы