调用具有未知参数的构造函数

时间:2013-03-25 00:10:40

标签: java reflection constructor

我有一组课程:TestClass1TestClass2TestClass3。所有这些类都继承自类MainTestClass。类TestClass1TestClass2TestClass3具有不同的构造函数。例如:

TestClass1(String s)
TestClass2(Integer i)
TestClass3(Double d)

类可以有多个构造函数 - 每个构造函数都与其他构造函数不同。

现在我想随机创建这些类的实例并将它们存储在List中。为此,我将Class的{​​{1}}个对象存储在一个列表中,使用TestClass1,...。然后,我得到每个类的第一个构造函数,它具有非零参数计数。现在,当我想使用TestClass1.class方法创建对象时,我不知道传递给这个特定构造函数的参数的类型和数量。

使用反射可以实现这样的效果吗?我一直在考虑像

这样的东西
newInstance()

setConstructorArgument(int number, Object value)

Java中是否存在类似的方法?

1 个答案:

答案 0 :(得分:2)

构造函数对象有一个newInstance方法,可以接受构造的参数 它所属的类。显然,参数必须与预期的参数相匹配 getParameterTypes方法可以提供这些。

对象... initargs实际上意味着Object [] initargs,除了它允许语法

newInstance(param1, param2, param3);

以及

newInstance(new Object[]{param1, param2, param3});

你还应该记住

newInstance(null);

并不意味着

newInstance(new Object[]{null});

不时捕捉到人们。

我个人不喜欢varargs,但是喜欢la vie。