LoginSignup
5
6

More than 5 years have passed since last update.

method.invokeについて

Last updated at Posted at 2019-05-23

動的にメソッドを呼び出して使うという機会はなかったのですが、ソースコードでたまたま見かけることが気になったので実践。

確認のためクラスを作成して試してみました。
ここでは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を呼び出しました

使い方についてこんな使い方があるよなどあれば編集リクエストでお待ちしております。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6