【8/31まで 今季最大のセール開催中!】Udemyの人気コースが今なら1,200円から!!

【Java入門】リフレクションでprivateメソッドを実行する方法

【Java入門】リフレクションでprivateメソッドにアクセスする方法

この記事では、以下のProductクラスが持つ、print(),print2(),print3()メソッドにリフレクションを使ってアクセスする方法をまとめています。

Product.java

public class Product {

    //引数なし、戻り値なしのメソッド
    private void print(){
        System.out.println("ハローワールド");
    }

    //引数あり、戻り値なしのメソッド
    private void print2(String str){
        System.out.println(str);
    }

    //引数あり、戻り値ありのメソッド
    private String print3(String str){
        return str + "です。";
    }
}

メソッドの呼び出し(引数なし、戻り値なし)

引数も戻り値もないprint()を呼び出す方法は以下のとおりです。

ProductTest.java

//インスタンスを取得。
Product obj = new Product();

//メソッドを取得。
Method method = Product.class.getDeclaredMethod("print");

//メソッドにアクセスできるようにする。
method.setAccessible(true);

//メソッド実行
method.invoke(obj);

実行結果

ハローワールド

メソッドの呼び出し(引数あり、戻り値なし)

引数を取るprint2()を呼び出す方法は以下のとおりです。

ProductTest.java

//インスタンスを取得。
Product obj = new Product();

//メソッドを取得。
Method method = Product.class.getDeclaredMethod("print2", String.class);

//メソッドにアクセスできるようにする。
method.setAccessible(true);

//メソッド実行
method.invoke(obj, "おはよう世界");

実行結果

おはよう世界

メソッドの呼び出し(引数あり、戻り値あり)

引数を取り、戻り値も返すprint3()を呼び出す方法は以下のとおりです。

ProductTest.java

//インスタンスを取得。
Product obj = new Product();

//メソッドを取得。
Method method = Product.class.getDeclaredMethod("print3", String.class);

//メソッドにアクセスできるようにする。
method.setAccessible(true);

//メソッド実行
String result = (String) method.invoke(obj, "Javaは世界一");

//戻り値の出力。
System.out.println(result);

実行結果

Javaは世界一です。

getDeclaredMethodとgetMethodの違い

取得したいメンバがpublicの場合はgetMethodで取得することができますが、
public以外のメンバーを取得したい場合はgetDeclaredMethodを使う必要があります。

以上で記事の解説はお終い!

もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です