Java の Method クラスの invoke() メソッドの使い方
Javaでは、`Method` クラスの `invoke()` メソッドを使用して特定のオブジェクトのメソッドを呼び出します。書式は以下のとおりです。
- まず、リフレクションを使用して、呼び出すメソッドオブジェクトを取得します。メソッドオブジェクトを取得するには、`Class` クラスの `getDeclaredMethod()` メソッドまたは `getMethod()` メソッドを使用できます。この 2 つのメソッドの違いは、`getDeclaredMethod()` メソッドはすべてのアクセス権限のメソッドを取得できるのに対し、`getMethod()` メソッドは `public` アクセス権限のメソッドのみを取得できることです。
- 呼び出すメソッドのインスタンスオブジェクトを作成します。メソッドがスタティックメソッドの場合は、インスタンスオブジェクトをnullにして使用できます。メソッドが非スタティックメソッドの場合は、メソッドが属するクラスのインスタンスオブジェクトを使用する必要があります。
- メソッドクラスのinvoke()メソッドを呼び出してメソッドを実行します。このメソッドは2つの引数を受け取ります。1つ目の引数はインスタンスオブジェクトで、2つ目の引数はメソッドに渡す引数です。メソッドに引数がなければ、nullまたは長さ0の配列を渡すことができます。
以下に、クラスの invoke() メソッドを使用してメソッドを呼び出す方法を示すサンプルコード例を示します。
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
// 获取方法对象
Class<?> clazz = MyClass.class;
Method method = clazz.getDeclaredMethod("myMethod", String.class);
// 创建实例对象
MyClass instance = new MyClass();
// 调用方法
Object result = method.invoke(instance, "Hello World");
// 输出结果
System.out.println(result);
}
}
class MyClass {
public String myMethod(String input) {
return "You entered: " + input;
}
}
上の例では、まずgetDeclaredMethod()メソッドで”myMethod”というメソッドオブジェクトを取得しています。次に、MyClassのインスタンスオブジェクトを作成し、invoke()メソッドを使ってmyMethodメソッドを呼び出し、文字列パラメータの”Hello World”を渡しています。最後に、メソッドの戻り値をコンソールに出力しています。
invoke()メソッドの戻り値はオブジェクト型なので、状況に応じて型変換することが必要です。また、メソッドが例外をスローした場合、invoke()メソッドも例外をスローします。適切な例外処理が必要です。