原文地址:http://tutorials.jenkov.com/java-reflection/methods.html
============================================================================================
使用Java反射,你可以檢查類的方法並在執行時呼叫它們。這是通過Java類java.lang.reflect.Method做的。本將會比較詳細的講述Java的Method物件。下面是涵蓋的主題列表:
- Obtaining Method Objects (獲取Method物件)
- Method Parameters and Return Types (Method的引數和返回值型別)
- Instantiating Objects using Constructor Object (使用建構函式物件例項化物件)
============================================================================================
- Obtaining Method Objects
從Class物件中獲取Method物件。這裡有個例子:
Class aClass = ...//obtain class object Method[] methods = aClass.getMethods();
陣列Method[ ]將儲存類中宣告的每個public方法的Method例項。
如果你知道你要訪問的方法的準確的引數型別,你可以這樣獲取方法而不是所有的方法。這個例子返回一個方法名叫doSomething的public的方法,在給定的類中指定了接受一個String型別的引數:
Class aClass = ...//obtain class object Method method = aClass.getMethod("doSomething", new Class[]{String.class});
如果沒有和給定引數相匹配的的方法,會丟擲NoSuchMethodException異常。
如果你嘗試去訪問的方法沒有引數,傳入null作為引數,像這樣:
Class aClass = ...//obtain class object Method method = aClass.getMethod("doSomething", null);
============================================================================================
- Method Parameters and Return Types
你可以像這樣讀取一個給定的方法所接收的引數:
Method method = ... // obtain method - see above Class[] parameterTypes = method.getParameterTypes();
你可以像這樣訪問一個方法的返回值型別:
Method method = ... // obtain method - see above Class returnType = method.getReturnType();
============================================================================================
- Invoking Methods using Method Object
你可以像這樣呼叫一個方法:
//get method that takes a String as argument Method method = MyObject.class.getMethod("doSomething", String.class); Object returnValue = method.invoke(null, "parameter-value1");
引數null是你想要呼叫方法的物件。如果是靜態方法,你需要提供null作為引數而不是一個物件的例項。在這個例子裡,如果doSomething(String.class)不是靜態的,你需要提供validMyObject作為例項而不是null。
方法Method.invoke(Object target, Object … parameters)接受不定個數的引數, 但是你必須提供與你所呼叫的方法對應的每個引數。在這裡,這個方法接受一個String型別的引數,所以必須提供一個String型別的引數。
========================================================================================
- 目錄
這是一個本教程到目前為止涵蓋的主題列表:
- Java反射——引言
- Java反射——Class物件
- Java反射——建構函式
- Java反射——欄位
- Java反射——方法
- Java反射——Getter和Setter
- Java反射——私有欄位和私有方法
- Java反射——註解
- Java反射——泛型
- Java反射——陣列
- Java反射——動態代理
- Java反射——類的動態載入和重新載入
(敬請期待下一篇翻譯)