调用未知参数的构造函数

问题描述:

我有一组类:TestClass1,TestClass2TestClass3。所有这些类都从类MainTestClass继承。类TestClass1,TestClass2TestClass3具有不同的构造函数。例如:调用未知参数的构造函数

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

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

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

是否有可能使用反射来实现这样的效果?我一直在思考着什么样

setConstructorArgument(int number, Object value) 

setConstructorArguments(Object[] arguments) 

做类似的方法都存在的Java?

+3

[构造函数对象有一个newInstance](http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Constructor.html#newInstance(java.lang.Object ...) ))需要参数的方法。你也可以通过构造函数来获取参数类型和数量。 – BevynQ 2013-03-25 00:28:16

+0

好吧,我的错。我不知道,你可以用'Object [] initargs'替代'Object ... initargs'。你可以发表你的评论作为答案,我会接受它作为正确的。谢谢 :) – Hfaua 2013-03-25 00:51:09

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

对象... initargs事实上确实意味着对象[] initargs,但它允许语法

newInstance(param1, param2, param3); 

以及

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

你也应该记住,

newInstance(null); 

并不意味着

newInstance(new Object[]{null}); 

其中不时发现人。

个人我不喜欢varargs,但c'est la vie。