java - 用 Class.forName() 初始化一个类,它有一个带参数的构造函数

标签 java oop design-patterns reflection

我正在实例化一个这样的类。

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/

相关文章:

java - Swing PaintComponent 无法正常工作

java - 在 Java 中(例如在 Android 中)创建字符串资源是一个好主意吗?

c# - 在存储库模式中加载子记录

c# - 异常与临时类型。什么东西可能会倒下?

java - 当 value 是 ArrayList 时,将键值插入 HashTable

java - 查找 PI 具有特定值的术语

oop - 没有依赖注入(inject)的对象组合是一件坏事吗?

oop - 有什么比经理、处理器等更好的名字?

java - 是否存在隐藏供应商特定逻辑的数据存储查询的良好通用模式?

java - 转换为可运行 Jar 文件时读取 .ini 文件