java.lang.reflect.Method.invoke(Object obj, Object... args)
方法使用指定的參數調用由此Method
對象表示的底層方法,個別參數自動展開以匹配原始形式參數,原始參考參數和參考參數都需要進行方法調用轉換。
聲明
以下是java.lang.reflect.Method.invoke(Object obj, Object... args)
方法的聲明。
public Object invoke(Object obj, Object... args)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException
參數
- obj - 調用底層方法的對象。
- args - 用於方法調用的參數。
返回值
- 使用參數
args
將由對象表示的方法調度obj
上的結果。
異常
- IllegalAccessException - 如果此方法對象正在強制執行Java語言訪問控制,並且底層方法無法訪問。
- IllegalArgumentException - 如果方法是一個實例方法,並且指定的對象參數不是聲明底層方法(或其子類或實現者)的類或介面的實例; 如果實際和正式參數的數量不同; 如果原始參數的解包轉換失敗; 或者如果在可能的展開之後,通過方法調用轉換,參數值不能轉換為相應的形式參數類型。
- InvocationTargetException - 如果底層方法拋出異常。
- NullPointerException - 如果指定的對象為空,並且該方法是實例方法。
- ExceptionInInitializerError - 如果由此方法引發的初始化失敗。
以下示例顯示java.lang.reflect.Method.invoke(Object obj, Object...args)
方法的用法。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MethodDemo {
public static void main(String[] args)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Method[] methods = SampleClass.class.getMethods();
SampleClass sampleObject = new SampleClass();
methods[1].invoke(sampleObject, "data");
System.out.println(methods[0].invoke(sampleObject));
}
}
class SampleClass {
private String sampleField;
public String getSampleField() {
return sampleField;
}
public void setSampleField(String sampleField) {
this.sampleField = sampleField;
}
}
讓我們編譯並運行上面的程式,這將產生以下結果 -
data