我正在实例化一个这样的类。
myObj = (myObj) Class.forName("fully qualified class name here").newInstance();
我的疑问是,如果我们有一个带参数的构造函数,我们如何像上面那样实例化它。
谢谢,
纳伦德拉
最佳答案
使用 Class.getConstructor()
并调用Constructor.newInstance()
在那。例如,如果这是您在 Foo
类上的构造函数:
public Foo(String bar, int baz) {
}
你必须这样做:
Constructor c = Class.forName("Foo").getConstructor(String.class, Integer.TYPE);
Foo foo = (Foo) c.newInstance("example", 34);
您必须知道需要将哪些参数传递给构造函数。如果这不是可取的,您应该考虑使用一个空的构造函数。然后有方法来设置你通常传递给构造函数的内容。
不过,有人可能会问您这里的模式是否正确。你真的需要使用反射,也许有更好的方法?如果你知道你已经将要转换到你的对象,为什么不直接构造它呢?您可能想提供更多关于为什么需要这样做的背景信息。有正当理由,但您没有说明任何理由。
关于java - 用 Class.forName() 初始化一个类,它有一个带参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5658182/