1. ホーム
  2. java

[解決済み] Java のメソッド名を文字列で指定した場合、どのように呼び出すのですか?

2022-03-14 14:05:41

質問

2つの変数がある場合

Object obj;
String methodName = "getName";

のクラスがわからなければ obj で特定されるメソッドをどのように呼び出すことができるのでしょうか? methodName を使用することができますか?

呼び出されるメソッドにはパラメータがなく String の戻り値です。それは Java Bean のゲッター .

どのように解決するのですか?

腰を据えてコーディングすると、次のような感じになります。

java.lang.reflect.Method method;
try {
  method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) { ... }
  catch (NoSuchMethodException e) { ... }

パラメータは、必要なメソッドを特定します (複数のオーバーロードがある場合、そのメソッドに引数がない場合は、引数のみを指定します)。 methodName ).

そして、そのメソッドを呼び出すには

try {
  method.invoke(obj, arg1, arg2,...);
} catch (IllegalArgumentException e) { ... }
  catch (IllegalAccessException e) { ... }
  catch (InvocationTargetException e) { ... }

ここでも、引数を省き .invoke がない場合は でも、そうなんだ。について読む Java リフレクション