2009-09-15 48 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

相关问题