Java8リフレクションでinvokeメソッドを実行する

環境
Eclipse 2019
Java8
Windows 10 64bit

関数
public Object invoke(Object obj, Object… args) throws IllegalAccessException,IllegalArgumentException,InvocationTargetException
このMethodオブジェクトによって表される基本となるメソッドを、指定したオブジェクトに対して指定したパラメータで呼び出します。
パラメータ:
obj – 基本となるメソッドの呼出し元のオブジェクト
args – メソッド呼出しに使用される引数
戻り値:
このオブジェクトが表すメソッドを、パラメータargsを使用してobjにディスパッチした結果
書式
クラス名 オブジェクトA = new クラス名();
Class<?>オブジェクトB =クラスオブジェクトA.getClass();
Method 変数名;
変数名 =オブジェクトB.getMethod(“メソッド名",変数名)

使用例

package com.arkgame.bat;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class FieldsDemo {

      public static void main(String[] args) {
            User user = new User();

            // クラスUserの情報を持つClassクラスのインスタンスを取得
            Class<?> cs = user.getClass();

            Method mt;
            Method mt2;
            try {
                  // Methodクラスのinvoke方法でクラスのsetAddrを設定します
                  mt = cs.getMethod("setAddr", String.class);
                  mt.invoke(user, "東京");

                  // Methodクラスのinvoke方法でクラスのgetAddrを設定します
                  mt2 = cs.getMethod("getAddr");
                  String res = (String) mt2.invoke(user);
                  System.out.println("invokeメソッドを実行する結果: " + res);

            } catch (NoSuchMethodException e) {
                  e.printStackTrace();
            } catch (IllegalAccessException e) {
                  e.printStackTrace();
            } catch (IllegalArgumentException e) {
                  e.printStackTrace();
            } catch (InvocationTargetException e) {
                  e.printStackTrace();
            }

      }

}

実行結果

invokeメソッドを実行する結果: 東京

 

Java

Posted by arkgame