有没有办法在给定类名(动态)的情况下创建特定类的实例并将参数传递给它的构造函数。
类似:
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")
。
我是一名优秀的程序员,十分优秀!