java.lang.reflect.Method.invoke() 方法示例



描述

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 − 如果此 Method 物件正在強制執行 Java 語言訪問控制,並且基礎方法不可訪問。

  • IllegalArgumentException − 如果該方法是例項方法,並且指定的 object 引數不是宣告基礎方法的類或介面(或其子類或實現者)的例項;如果實際引數和形式引數的數量不同;如果原始引數的解包轉換失敗;或者在可能的解包之後,引數值無法透過方法呼叫轉換轉換為相應的形式引數型別。

  • InvocationTargetException − 如果基礎方法丟擲異常。

  • NullPointerException − 如果指定的 object 為 null,並且該方法是例項方法。

  • ExceptionInInitializerError − 如果此方法引發的初始化失敗。

示例

以下示例演示了 java.lang.reflect.Method.invoke(Object obj, Object... args) 方法的用法。

package com.tutorialspoint;

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
java_reflect_method.htm
廣告
© . All rights reserved.