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

时间:2011-05-26 14:20:37

标签: java reflection bytecode

我有一个名为A的类,我需要在不调用其构造函数的情况下创建该类的新对象。我想通过反思来设置它的所有属性。

我可以使用反射重新定义类A的构造函数吗?

或者有其他办法可以做到这一点吗?

2 个答案:

答案 0 :(得分:7)

在Sun / Oracle JVm中,您可以使用Unsafe.allocateInstance(Class)。否则,您必须生成字节代码以创建实例而无需调用构造函数。您可以使用ASM。如果没有使用Reflection的构造函数,则无法创建实例。

BTW:您可以使用字节代码操作定义新方法,但是要添加构造函数,您必须在加载之前更改类。 (这很棘手)

答案 1 :(得分:-1)

使用占用最少参数的构造函数调用对象;使用伪参数。然后继续操纵你想要的对象。