privateメソッドの呼び出し

たまにテストとかデバッグで、外部クラスからのprivateメソッド呼び出しってやるんだけど、よくやり方忘れる。
ので、メモ。


こんなクラスがあったとして。

public class A {

    private String b = "こんにちは。";
    
    private String c(String name) {
        return name + "さん、" + b;
    }
}


こんなんで実行すると。

public class TestA {

    public static void main(String[] args) throws Exception {
        
        // Aクラスに宣言されているメソッド(メソッド名:c、メソッドの引数:String)を取得
        java.lang.reflect.Method method = A.class.getDeclaredMethod("c", new Class[]{String.class});
        
        // 取得したprivateメソッドをアクセス可能に変更
        method.setAccessible(true);
        
        // 取得したメソッドをnewしたAにて"マイケル"を引数に実行
        System.out.println(method.invoke(new A(), new Object[] {"マイケル"}));
    }
}


こんな出力結果になる。

マイケルさん、こんにちは。


というわけだ。