【问题标题】:Why are constructors returned by ReflectionFactor.newConstructorForSerialization() called "munged"?为什么 ReflectionFactor.newConstructorForSerialization() 返回的构造函数称为“munged”?
【发布时间】:2009-09-15 09:22:38
【问题描述】:

在 Java 中,可以通过 sun.reflect.ReflectionFactor.newConstructorForSerialization() 检索一个类的实例,而无需实际调用已声明的构造函数。

据我所知,这个特殊的构造函数叫做“munged”。这个词是从哪里来的?我在任何字典中都找不到它。

【问题讨论】:

标签: java reflection constructor instantiation


【解决方案1】:

我相信它是在以下意义上使用的,因为您通过跳过构造函数以某种方式绕过/伪造了正常的对象创建周期:

(计算)修改或伪造电子邮件 (或其他互联网)地址,所以它 不能自动收割, 尤其是避免垃圾邮件机器人

(计算)更改文件;制作 不可撤销的改变,破坏, 混淆

这两个定义都来自普林斯顿的 WordNet。

【讨论】:

    【解决方案2】:

    来自维基词典:

    To transform data in an undefined or unexplained manner.

    反序列化的构造函数不会[必然]调用超类构造函数,并且不是原始类的一部分。从 JVM 规范的角度来看,它是非法的 - 合法构造函数的修改版本。

    【讨论】:

      【解决方案3】:

      此外,sun.* 包中的类不应直接使用,因为它们在其他 JDK 实现中可能不可用(因此此“构造函数”可能未在其他 JDK 中定义)。

      【讨论】:

      • 您可以使用对象:code.google.com/p/objenesis 在某些情况下您必须绕过构造函数: * 序列化、远程处理和持久性 - 对象需要被实例化并恢复到特定状态,而无需调用代码。 * 代理、AOP 库和模拟对象 - 可以对类进行子类化,而无需担心 super() 构造函数。 * 容器框架 - 可以以非标准方式动态实例化对象。 (取自上述网站。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      相关资源
      最近更新 更多