我有一个名为A
的类,我需要在不调用其构造函数的情况下创建该类的新对象。我想通过反射来设置它的所有属性。
我可以使用反射重新定义类A
的构造函数吗?
或者有其他方法可以做到这一点吗?
在Sun/Oracle JVm中,您可以使用Unsafe.allocateInstance(Class)
。否则,您必须在不调用构造函数的情况下生成字节码来创建实例。您可以使用ASM进行此操作。如果没有单独使用反射的构造函数,就无法创建实例。
BTW:您可以使用字节码操作定义一个新方法,但要添加构造函数,您必须在加载类之前更改它。(这很难做到)
使用参数量最少的构造函数调用对象;使用伪参数。然后继续以您喜欢的方式操作对象。