通過Java反射機制,我們可以在運行時檢視類的構(gòu)造函數(shù)并初始化對象。這一切都是通過java.lang.reflect.Constructor
來實現(xiàn)的。本文將深入描述JavaConstructor
對象。
Obtaining Constructor Objects
Constructor
類的實例是通過Class
對象來獲取的,下面是示例代碼:
<pre>
Class aClass = ...//obtain class object
Constructor[] constructors = aClass.getConstructors();
</pre>
類的每一個public的構(gòu)造函數(shù)都會在Constructor[]
數(shù)組中有對應(yīng)的實例。
如果你精確知道你想要獲取的構(gòu)造函數(shù)的參數(shù)類型,你可以不必獲取所有的構(gòu)造函數(shù),而是通過直接指定參數(shù)類型的方式來返回對應(yīng)的構(gòu)造函數(shù),下面的例子返回了當(dāng)前類的接受一個String
類型參數(shù)的public構(gòu)造函數(shù),示例代碼如下:
<pre>
Class aClass = ...//obtain class object
Constructor constructor =aClass.getConstructor(new Class[]{String.class});
</pre>
如果沒有構(gòu)造函數(shù)滿足給定的匹配參數(shù)類型,比如我們這里的String.class
,那么將拋出NoSuchMethodException
異常。
Constructor Parameters
你可以像下面的例子代碼一樣來獲取一個構(gòu)造函數(shù)接受的參數(shù)類型列表。
<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()
方法可以接受可變數(shù)量的參數(shù),但是對于你調(diào)用的構(gòu)造函數(shù),你必須傳入相同個數(shù)的參數(shù)。在我們的例子中構(gòu)造函數(shù)接受一個String
類型的參數(shù),所以我們傳入一個字符串"constructor-arg1"
。
原文
Java Reflection - Constructors