使用Class.forName()初始化一个类,该类具有带参数的构造函数

Nar*_*dra 26 java oop reflection design-patterns

我正在实例化这样一个类.

myObj = (myObj) Class.forName("fully qualified class name here").newInstance();
Run Code Online (Sandbox Code Playgroud)

我怀疑的是,如果我们有一个构造函数来获取参数,我们如何像上面那样实例化它.

谢谢,
Narendra

Whi*_*g34 57

使用Class.getConstructor()并呼吁Constructor.newInstance().例如,如果这是您在类上的构造函数Foo:

public Foo(String bar, int baz) {
}
Run Code Online (Sandbox Code Playgroud)

你必须做这样的事情:

Constructor c = Class.forName("Foo").getConstructor(String.class, Integer.TYPE);
Foo foo = (Foo) c.newInstance("example", 34);
Run Code Online (Sandbox Code Playgroud)

您必须知道需要将哪些参数传递给构造函数.如果这不可取,你应该考虑使用一个空的构造函数.然后有方法来设置你通常传递给构造函数的东西.

有人可能会问你这里是否有正确的模式.你真的需要使用反射,也许有更好的方法吗?如果你知道你将要投射到你的物体,为什么不正常建造呢?您可能希望提供更多关于为什么需要执行此操作的上下文.有正当理由,但您没有说明.