配列内の引数でMethod.invoke()を呼び出す
リフレクションを利用したメソッド呼び出しには、Method クラスの invoke() メソッドを用いる。invoke() メソッドは指定されたメソッドの呼び出しに使用され、その際に対応する引数が渡される。
メソッドオブジェクトmethodがある場合、invoke()メソッドを使用してメソッドを呼び出すことができます。invoke()メソッドの最初の引数はメソッドを呼び出すオブジェクトインスタンス(メソッドがstaticの場合、nullにすることができます)、2番目以降の引数はメソッドに渡す引数です。
以下にサンプルコードを示します。
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
// 获取要调用的方法
Method method = MyClass.class.getMethod("add", int.class, int.class);
// 创建方法的对象实例(如果方法是静态的,则可以为null)
MyClass obj = new MyClass();
// 调用方法,并传递参数
int result = (int) method.invoke(obj, 1, 2);
// 打印结果
System.out.println("Result: " + result);
}
}
class MyClass {
public int add(int a, int b) {
return a + b;
}
}
上記コードでは、まず getMethod() メソッドで「add」という名前のメソッドオブジェクトを取得しています。次に、MyClass のオブジェクトインスタンスを作成し、invoke() メソッドを呼び出して add() メソッドを呼び出し、パラメータ 1 と 2 を渡しています。最後に、呼び出し結果を出力しています。
invoke() メソッドの戻り値の型は Object 型なので、具体的な戻り値を取得するにはキャストが必要です。この例では、add() メソッドの結果が int 型なので、int 型にキャストします。
さらに、invoke()メソッドはprivateやprotectedなどのメソッドのアクセス修飾子を扱うことができます。ただし、プライベートメソッドを呼び出す場合は、setAccessible(true)でアクセス権限を設定する必要があります。