privateメソッドを実行する
リフレクションを使用してprivateなメソッドを実行することができます。
//クラスを呼び出す
Class clazz;
try {
clazz = Class.forName("[クラスの完全限定名]");
//または
//Class clazz = [クラス名].class;
//インスタンスを生成
Object obj = clazz.newInstance();
//パラメータの型を宣言
Class[] argTypes = {String.class};
//privateメソッドの呼び出し
Method method = clazz.getDeclaredMethod("[メソッド名]", argTypes);//getMethod()ではpublicメソッドしか取得できない
//privateなメソッドをアクセス可能にする
method.setAccessible(true);
//メソッドに渡すパラメータ
String message = "test";
Object[] args = {message};
//メソッドを実行
String retMessage = (String)method.invoke(obj, args);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
Class clazz;
try {
clazz = Class.forName("[クラスの完全限定名]");
//または
//Class clazz = [クラス名].class;
//インスタンスを生成
Object obj = clazz.newInstance();
//パラメータの型を宣言
Class[] argTypes = {String.class};
//privateメソッドの呼び出し
Method method = clazz.getDeclaredMethod("[メソッド名]", argTypes);//getMethod()ではpublicメソッドしか取得できない
//privateなメソッドをアクセス可能にする
method.setAccessible(true);
//メソッドに渡すパラメータ
String message = "test";
Object[] args = {message};
//メソッドを実行
String retMessage = (String)method.invoke(obj, args);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
同様にprivateコンストラクタを呼び出すこともできます。
Class clazz;
clazz = Class.forName("[クラスの完全限定名]");
final Constructor constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
instance = ([クラスの型])constructor.newInstance();
clazz = Class.forName("[クラスの完全限定名]");
final Constructor constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
instance = ([クラスの型])constructor.newInstance();