Java反射-构造函数

时间:2020-01-09 14:20:02  来源:igfitidea点击:

使用Java Reflection,我们可以检查类的构造函数并在运行时实例化对象。这是通过Java类" java.lang.reflect.Constructor"完成的。本文将更详细地介绍有关JavaConstructor对象的信息。

获取构造器对象

"构造函数"类是从"类"对象获得的。这是一个例子:

Class aClass = ...//obtain class object
Constructor[] constructors = aClass.getConstructors();

对于在该类中声明的每个公共构造函数,Constructor []数组将具有一个Constructor实例。

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

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

如果没有构造函数与给定的构造函数参数匹配,在这种情况下为String.class,则抛出NoSuchMethodException。

构造函数参数

我们可以像这样读取给定构造函数采用的参数:

Constructor constructor = ... // obtain constructor - see above
Class[] parameterTypes = constructor.getParameterTypes();

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

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

//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。