调用未知参数的构造函数
问题描述:
我有一组类:TestClass1
,TestClass2
和TestClass3
。所有这些类都从类MainTestClass
继承。类TestClass1
,TestClass2
和TestClass3
具有不同的构造函数。例如:调用未知参数的构造函数
TestClass1(String s)
TestClass2(Integer i)
TestClass3(Double d)
类可以有多个构造函数 - 每个构造函数都不同于其他构造函数。
现在我想随机创建这些类的实例并将它们存储在List中。为此,我将对象TestClass1
,...使用TestClass1.class
,...存储在列表中。然后,我得到例如每个类的第一个构造函数,它具有非零参数count。现在,当我想使用newInstance()
方法创建对象时,我不知道传递给此特定构造函数的参数的类型和数量。
是否有可能使用反射来实现这样的效果?我一直在思考着什么样
setConstructorArgument(int number, Object value)
或
setConstructorArguments(Object[] arguments)
做类似的方法都存在的Java?
答
构造函数对象有一个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。
[构造函数对象有一个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
好吧,我的错。我不知道,你可以用'Object [] initargs'替代'Object ... initargs'。你可以发表你的评论作为答案,我会接受它作为正确的。谢谢 :) – Hfaua 2013-03-25 00:51:09