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();
 
}

同様にprivateコンストラクタを呼び出すこともできます。

    Class clazz;
    clazz = Class.forName
("[クラスの完全限定名]");
   
final Constructor constructor = clazz.getDeclaredConstructor();
    constructor.setAccessible
(true);
   
    instance =
([クラスの型])constructor.newInstance();

Java TipsのTOPに戻る