原文地址: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反射——類的動態加載和重新加載
(敬請期待下一篇翻譯)