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[] {"マイケル"})); } }
こんな出力結果になる。
マイケルさん、こんにちは。
というわけだ。