通過(guò)Java反射機(jī)制玩焰,我們可以在運(yùn)行時(shí)檢視類的構(gòu)造函數(shù)并初始化對(duì)象哗伯。這一切都是通過(guò)java.lang.reflect.Constructor
來(lái)實(shí)現(xiàn)的史飞。本文將深入描述JavaConstructor
對(duì)象负蠕。
Obtaining Constructor Objects
Constructor
類的實(shí)例是通過(guò)Class
對(duì)象來(lái)獲取的九巡,下面是示例代碼:
<pre>
Class aClass = ...//obtain class object
Constructor[] constructors = aClass.getConstructors();
</pre>
類的每一個(gè)public的構(gòu)造函數(shù)都會(huì)在Constructor[]
數(shù)組中有對(duì)應(yīng)的實(shí)例哺徊。
如果你精確知道你想要獲取的構(gòu)造函數(shù)的參數(shù)類型室琢,你可以不必獲取所有的構(gòu)造函數(shù),而是通過(guò)直接指定參數(shù)類型的方式來(lái)返回對(duì)應(yīng)的構(gòu)造函數(shù)落追,下面的例子返回了當(dāng)前類的接受一個(gè)String
類型參數(shù)的public構(gòu)造函數(shù)盈滴,示例代碼如下:
<pre>
Class aClass = ...//obtain class object
Constructor constructor =aClass.getConstructor(new Class[]{String.class});
</pre>
如果沒(méi)有構(gòu)造函數(shù)滿足給定的匹配參數(shù)類型,比如我們這里的String.class
,那么將拋出NoSuchMethodException
異常巢钓。
Constructor Parameters
你可以像下面的例子代碼一樣來(lái)獲取一個(gè)構(gòu)造函數(shù)接受的參數(shù)類型列表病苗。
<pre>
Constructor constructor = ... // obtain constructor - see above
Class[] parameterTypes = constructor.getParameterTypes();
</pre>
Instantiating Objects using Constructor Object
你可以像下面的代碼一樣來(lái)初始化一個(gè)對(duì)象:
<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ù),但是對(duì)于你調(diào)用的構(gòu)造函數(shù)症汹,你必須傳入相同個(gè)數(shù)的參數(shù)硫朦。在我們的例子中構(gòu)造函數(shù)接受一個(gè)String
類型的參數(shù),所以我們傳入一個(gè)字符串"constructor-arg1"
背镇。
原文
Java Reflection - Constructors