使用 Class.forName() 初始化一个类,该类有一个带参数的构造函数
我正在实例化一个这样的类。
myObj = (myObj) Class.forName("fully qualified class name here").newInstance();
我的疑问是,如果我们有一个带有参数的构造函数,我们如何才能像上面那样实例化它。
谢谢,
纳伦德拉
I am instantiating a class like this.
myObj = (myObj) Class.forName("fully qualified class name here").newInstance();
My doubt here is if we have a constructor which takes arguments how can we instantiate it like above one.
Thanks,
Narendra
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
Class.getConstructor()
并调用Constructor.newInstance()
对此。例如,如果这是类Foo
上的构造函数:您必须执行以下操作:
您必须知道需要将哪些参数传递给构造函数。如果这不合需要,您应该考虑使用一个空的构造函数。然后使用方法来设置通常传递给构造函数的内容。
有人可能会问你这里的模式是否正确。您真的需要使用反射吗?也许有更好的方法?如果您知道您已经要强制转换为对象,为什么不正常构建它呢?您可能需要提供更多背景信息来说明为什么需要这样做。有充分的理由,但你没有说明。
Use
Class.getConstructor()
and callConstructor.newInstance()
on that. For example if this is your constructor on classFoo
:You'd have to do something like this:
You'll have to know what arguments need to be passed to the constructor. If that's not desirable you should consider having an empty constructor. Then have methods to set what you'd normally pass into the constructor.
One might ask if you have the right pattern here though. Do you really need to use reflection, perhaps there's a better approach? If you know you're going to be casting to your object already, why not just construct it normally? You might want to provide more context as to why you need to do this. There are valid reasons, however you haven't stated any.
newInstance()
始终调用默认构造函数。如果你想调用参数化构造函数,
Class[]
来获取带有参数类型的构造函数for Class 的 getDeclaredConstructor 方法
来创建构造函数实例
构造函数的
newInstance()
方法看一下示例代码。
输出:
查看 oracle 文档 页面了解更多详细信息。
newInstance()
always invokes default constructor.if you want to invoke parametrized constructor,
Class[]
for
getDeclaredConstructor
method of ClassObject[]
fornewInstance()
method of ConstructorHave a look at example code.
output:
Have a look at oracle documentation page for more details.
如果您根据
字符串“此处完全限定的类名”来选择要创建的对象类型
,那么您很可能可以,并且应该将其替换为策略模式。If you are choosing type of object to create depending on
string "fully qualified class name here"
it's most likely you can and you should replace it with Strategy pattern.