動的にメソッドを呼び出して使うという機会はなかったのですが、ソースコードでたまたま見かけることが気になったので実践。
確認のためクラスを作成して試してみました。
ここではInvokeクラスで、Getmethodクラスのメソッド名を受け取り、動的に呼び出しています。
もっと工夫したら色々できそうですが、まずは手を動かして身体に覚えさせる目的でいます。
class Getmethod {
public void a(){
System.out.println("Aを呼び出しました");
}
public void b(String str){
System.out.println(str + "を呼び出しました");
}
public void c(String str,String str2){
System.out.println(str + "と" + str2 + "を呼び出しました");
}
}
public class Invoke {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
try {
// クラスの取得
Class<?> g = Class.forName("invoke.Getmethod");
// インスタンスの取得
Object myobj = g.newInstance();
// メソッドの取得
Method a = g.getMethod("a");
Method b = g.getMethod("b",String.class);
Method c = g.getMethod("c",String.class,String.class);
// メソッドの実行
a.invoke(myobj);
b.invoke(myobj,"b");
c.invoke(myobj,"c","d");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
下が実行結果です。
Aを呼び出しました
bを呼び出しました
cとdを呼び出しました
使い方についてこんな使い方があるよなどあれば編集リクエストでお待ちしております。