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メソッドを実行する結果: 東京