privateなメソッドを呼び出すコードのJava版
こちらもリフレクションを使った力業になってしまう
class A {
private void foo() {
System.out.println("A#foo()");
}
}
とりあえず、privateなメソッドfooを持ったAクラスを作る。
このfooを外部から呼び出すには下のようなコードでいける。
A a = new A();
try {
Class<? extends A> clazz = a.getClass(); // 型の情報から
Method method = clazz.getDeclaredMethod("foo", new Class[0]); // メソッドの情報を抜き出して
method.setAccessible(true); // 明示的にアクセス可能だと指定してから
method.invoke(a, new Object[0]); // 呼び出す
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
というわけでうざいくらいの検査例外のせいで結構な長さになっちゃった。