2010-08-15 36 views
17

我試圖修復一個程序錯誤,我認爲這可能是由於Hibernate搞清楚如何實例化一個對象的實例而不調用它的默認構造函數(或任何其他構造函數)。是否有可能在不調用構造函數的情況下在Java中創建對象的實例?

+3

您應該發佈原始問題而不是假設的解決方案。 – 2010-08-15 15:57:55

+2

Hibernate使用實體的默認空構造函數。你走錯了路。改爲發佈你的問題。 – 2010-08-15 16:09:25

回答

23

實際上,是的,如果您使用objenesis爲您實例化對象,則可以在實例化對象時繞過構造函數。它通過字節碼操作來實現這一點。

反序列化對象也會繞過構造函數。

這是不可能的使用反射。

7

是的,反序列化對象不會調用其構造函數。這就是說,我不明白爲什麼hibernate會序列化一個對象,除非可能在二級緩存中。

8

只是爲了完成圖片:使用方法clone來創建一個新的對象繞過構造函數。

+0

只要克隆()正確實施,當然。可以重寫克隆以充當不使用super.clone()的工廠方法。 (雖然應該使用super.clone(),而不是構造函數) – DerMike 2010-08-15 16:39:54

相關問題