原文地址:http://tutorials.jenkov.com/java-reflection/constructors.html
=====================================================================================================
使用Java反射,你可以在運行時檢查類的構造函數和實例化對象。這是通過Java類java.lang.reflect.Constructor做的。本文將會更詳細的介紹Java中的Constructor對象。下面是所涵蓋的主題列表:
- Obtaining Constructor Objects (獲取Constructor對象)
- Constructor Parameters (Constructor的參數)
- Instantiating Objects using Constructor Object (通過Constructor對象實例化對象)
=====================================================================================================
- Obtaining Constructor Objects
Constructor對象可以從Class對象中獲取。下面是一個例子:
Class aClass = ...//obtain class object Constructor[] constructors = aClass.getConstructors();
數組Constructor[ ]將會存儲在類中所有聲明為public的構造函數的Constructor實例。
如果你知道你要訪問的構造函數的精確參數類型,你可以這樣做而不是獲取所有的構造函數。這個例子返回給定類的一個public的且接收一個String類型的變量作為參數的構造函數:
Class aClass = ...//obtain class object Constructor constructor = aClass.getConstructor(new Class[]{String.class});
如果沒有和給定的參數相匹配的構造函數,會拋出NoSuchMethodException異常。
=====================================================================================================
- Constructor Parameters
你可以像這樣讀取一個給定的構造函數所接收的參數:
Constructor constructor = ... // obtain constructor - see above Class[] parameterTypes = constructor.getParameterTypes();
=====================================================================================================
- Instantiating Objects using Constructor Object
你可以像這樣實例化一個對象:
//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類型的參數。
========================================================================================
- 目錄
這是一個本教程到目前為止涵蓋的主題列表:
- Java反射——引言
- Java反射——Class對象
- Java反射——構造函數
- Java反射——字段
- Java反射——方法
- Java反射——Getter和Setter
- Java反射——私有字段和私有方法
- Java反射——注解
- Java反射——泛型
- Java反射——數組
- Java反射——動態代理
- Java反射——類的動態加載和重新加載
(敬請期待下一篇翻譯)