Java反射-构造函数

使用Java 反射,你可以在运行时检查类的构造函数并实例化对象。这是通过Java类的java.lang.reflect.Constructor完成的。本文将介绍Java Constructor对象。


1.获取 Constructor 对象

Constructor类是从Class对象获得的。这是一个例子:

Class aClass = ...//obtain class object

Constructor[] constructors = aClass.getConstructors();


对于该类中定义的每个public构造函数,Constructor []数组将有一个与之对应的Constructor实例。

如果知道要访问的构造函数的精确参数类型,则可以这样做,而不是获取所有构造函数的数组。此示例返回给定类的公共构造函数,该构造函数使用String作为参数:

Class aClass = ...//obtain class object

Constructor constructor = aClass.getConstructor(new Class[]{String.class});


如果没有构造函数与给定的构造函数参数匹配,上面例子为String.class,则抛出NoSuchMethodException。


2.构造函数参数

你可以像这样读取给定构造函数的参数:

Constructor constructor = ... // obtain constructor - see above

Class[] parameterTypes = constructor.getParameterTypes();


3.使用构造函数对象实例化对象

可以像这样实例化一个对象:

//get constructor that takes a String as argument

Constructor constructor = MyObject.class.getConstructor(String.class);



MyObject myObject = (MyObject) constructor.newInstance("constructor-arg1");


Constructor.newInstance()方法采用可选数量的参数,但是你必须在要调用的构造函数中为每个参数提供一个值。上面例子中,它是一个采用String的构造函数,因此必须提供一个String。


 

展开阅读全文