2009-09-15 51 views
2

在Java中,我們可以通過sun.reflect.ReflectionFactor.newConstructorForSerialization()來檢索一個構造函數,而無需實際調用已聲明的構造函數,從而創建一個類的實例。爲什麼ReflectionFactor.newConstructorForSerialization()返回的構造函數名爲「munged」?

據我所知,這個特殊的構造函數被稱爲「munged」。這個詞來自哪裏?我無法在任何字典中找到它。

+1

你爲什麼認爲它被稱爲「消逝」?我從來沒有聽說過這個,你有手嗎? – 2009-09-15 09:25:30

+0

http://svn.xstream.codehaus.org/browse/xstream/trunk/xstream/src/java/com/thoughtworks/xstream/converters/reflection/Sun14ReflectionProvider.java?r=HEAD – Martin 2009-09-15 10:20:20

回答

2

我相信這是作爲在下面的意義,因爲你不知何故繞過/僞裝正常的對象的創建週期,通過跳過構造:

(計算)修改或僞造電子郵件 (或其他互聯網)地址,所以 不能自動收穫, 尤其。以避免垃圾郵件機器人

(計算)更改文件;使 不可撤銷的變化,破壞, 混淆

兩個定義從普林斯頓的共發現。

0

此外,來自軟件包sun。*的類不應直接使用,因爲它們可能無法在其他JDK實現上使用(所以此「構造函數」可能與其他JDK未定義)。

+0

你可以使用objenesis:http: //code.google.com/p/objenesis/ 有些情況下,您必須繞過構造函數: *序列化,遠程處理和持久性 - 對象需要實例化並恢復到特定狀態,而無需調用代碼。 *代理,AOP庫和模擬對象 - 類可以被分類而不需要擔心super()構造函數。 *容器框架 - 可以以非標準方式動態地實現對象的對象。 (摘自上面的網站。) – Martin 2009-09-15 10:13:50

相關問題