通过Java反射机制,我们可以在运行时检视类的构造函数并初始化对象。这一切都是通过java.lang.reflect.Constructor
来实现的。本文将深入描述JavaConstructor
对象。
Obtaining Constructor Objects
Constructor
类的实例是通过Class
对象来获取的,下面是示例代码:
<pre>
Class aClass = ...//obtain class object
Constructor[] constructors = aClass.getConstructors();
</pre>
类的每一个public的构造函数都会在Constructor[]
数组中有对应的实例。
如果你精确知道你想要获取的构造函数的参数类型,你可以不必获取所有的构造函数,而是通过直接指定参数类型的方式来返回对应的构造函数,下面的例子返回了当前类的接受一个String
类型参数的public构造函数,示例代码如下:
<pre>
Class aClass = ...//obtain class object
Constructor constructor =aClass.getConstructor(new Class[]{String.class});
</pre>
如果没有构造函数满足给定的匹配参数类型,比如我们这里的String.class
,那么将抛出NoSuchMethodException
异常。
Constructor Parameters
你可以像下面的例子代码一样来获取一个构造函数接受的参数类型列表。
<pre>
Constructor constructor = ... // obtain constructor - see above
Class[] parameterTypes = constructor.getParameterTypes();
</pre>
Instantiating Objects using Constructor Object
你可以像下面的代码一样来初始化一个对象:
<pre>
//get constructor that takes a String as argument
Constructor constructor = MyObject.class.getConstructor(String.class);
MyObject myObject = (MyObject)
constructor.newInstance("constructor-arg1");
</pre>
Constructor.newInstance()
方法可以接受可变数量的参数,但是对于你调用的构造函数,你必须传入相同个数的参数。在我们的例子中构造函数接受一个String
类型的参数,所以我们传入一个字符串"constructor-arg1"
。
原文
Java Reflection - Constructors