我可以在Java中使用反射重新定义方法/构造函数吗?

问题描述

| 我有一个名为
A
的类,我需要在不调用其构造函数的情况下创建该类的新对象。我想通过反射设置其所有属性。 我可以使用反射重新定义类
A
的构造函数吗? 还是有其他方法可以做到这一点?     

解决方法

在Sun / Oracle JVm中,您可以使用
Unsafe.allocateInstance(Class)
。否则,您必须生成字节码来创建实例,而无需调用构造函数。您可以为此使用ASM。如果没有构造函数,则不能单独使用Reflection创建实例。 顺便说一句:您可以使用字节码操作定义一个新方法,但是要添加构造函数,则必须在加载类之前对其进行更改。 (这很棘手)     ,使用参数最少的构造函数调用对象;使用伪参数。然后继续操作您喜欢的对象。