使用类名创建实例并调用构造函数
2022-08-31 04:49:47
有没有办法在给定类名(动态)的情况下创建特定类的实例,并将参数传递给其构造函数。
像这样:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
其中 是 构造函数的参数。"MyAttributeValue"
MyClass
有没有办法在给定类名(动态)的情况下创建特定类的实例,并将参数传递给其构造函数。
像这样:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
其中 是 构造函数的参数。"MyAttributeValue"
MyClass
是的,像这样:
Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
当然,这仅适用于单个字符串参数,但您可以轻松修改它。
请注意,类名必须是完全限定的,即包括命名空间。对于嵌套类,您需要使用一美元(因为这是编译器使用的)。例如:
package foo;
public class Outer
{
public static class Nested {}
}
要获取该对象,您需要 .Class
Class.forName("foo.Outer$Nested")
可以使用 Class.forName()
获取所需类的 Class
对象。
然后使用 getConstructor()
查找所需的构造函数
对象。
最后,在该对象上调用 newInstance()
以获取新实例。
Class<?> c = Class.forName("mypackage.MyClass");
Constructor<?> cons = c.getConstructor(String.class);
Object object = cons.newInstance("MyAttributeValue");