我有一个名为A
的类,我需要在不调用其构造函数的情况下创建该类的新对象。我想通过反思来设置它的所有属性。
我可以使用反射重新定义类A
的构造函数吗?
或者有其他办法可以做到这一点吗?
答案 0 :(得分:7)
在Sun / Oracle JVm中,您可以使用Unsafe.allocateInstance(Class)
。否则,您必须生成字节代码以创建实例而无需调用构造函数。您可以使用ASM。如果没有使用Reflection的构造函数,则无法创建实例。
BTW:您可以使用字节代码操作定义新方法,但是要添加构造函数,您必须在加载之前更改类。 (这很棘手)
答案 1 :(得分:-1)
使用占用最少参数的构造函数调用对象;使用伪参数。然后继续操纵你想要的对象。