【譯】5. Java反射——方法

pengisgood發表於2013-09-07

原文地址:http://tutorials.jenkov.com/java-reflection/methods.html

============================================================================================

     使用Java反射,你可以檢查類的方法並在執行時呼叫它們。這是通過Java類java.lang.reflect.Method做的。本將會比較詳細的講述Java的Method物件。下面是涵蓋的主題列表:

  1. Obtaining Method Objects (獲取Method物件)
  2. Method Parameters and Return Types (Method的引數和返回值型別)
  3. 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型別的引數。

 ========================================================================================

  • 目錄

 

 

 

  這是一個本教程到目前為止涵蓋的主題列表:     

 

 

 

  1. Java反射——引言
  2. Java反射——Class物件
  3. Java反射——建構函式
  4. Java反射——欄位
  5. Java反射——方法
  6. Java反射——Getter和Setter
  7. Java反射——私有欄位和私有方法
  8. Java反射——註解
  9. Java反射——泛型
  10. Java反射——陣列
  11. Java反射——動態代理
  12. Java反射——類的動態載入和重新載入

 

 

 

(敬請期待下一篇翻譯)

 

相關文章