2016-04-18 8 views
0

プライベートメソッドに内部クラスからアクセスするための例を作成しましたが、例外クラスが見つからないたびに取得しています。私は以下のように例外取得していますプライベート内部クラスアクセスメソッド

class Test { 
     public static void main(String[] args) throws Exception { 
      Class<?> clazz = Class.forName("Inner.Private"); 
      Method m = clazz.getDeclaredMethod("foo"); 
      m.setAccessible(true); 
      m.invoke(new Inner()); 
     } 
    } 

class Inner { 
    private class Private { 
     private void foo() { 
      System.out.println("foo called"); 
     } 
    } 
}// end of Inner 

:スレッドで

例外を "メイン" にjava.lang.ClassNotFoundException:java.net.URLClassLoader $ 1.run(不明なソース)で Inner.Private

非常に参考になります。なぜそれが内部クラスまたは任意の洞察力を無視しているのか教えてください。

+1

テストをパブリッククラスにします。 – theVoid

+4

これは 'Inner $ Private'です。 – Savior

+1

@Pillarに加えて、 'Inner'インスタンスを' Inner.Private'のメソッドに与えているので、 'm.invoke(new Inner());'は動作しません。 – Tunaki

答えて

0

内側のクラスはその外側クラスに移動する必要があります。

public class Test { 

    private class Inner { 

     private void foo() { 
      System.out.println("foo called"); 
     } 
    } 

    public void test() 
      throws ClassNotFoundException, 
      NoSuchMethodException, 
      IllegalAccessException, 
      IllegalArgumentException, 
      InvocationTargetException { 
     Inner inner = new Inner(); 
     Class<?> clazz = Class.forName("com.oldcurmudgeon.test.Test$Inner"); 
     Method m = clazz.getDeclaredMethod("foo"); 
     m.setAccessible(true); 
     m.invoke(inner); 
    } 
+0

@Pillarどのように問題を解決していませんか?人々が回答を改善できるようにフィードバックを与えるときに説明してください。 – Popeye

+0

@Pillarそれは良いです、それは常に説明する方が良いです。このサイトの目的は、互いに助け合うことです。あなたが答えを持っているなら、あなたはそれが閉じられる前にそれを残しておくべきです。あなたがコメントで何を意味しているかを知っている人だけに本当に耳を傾けないでください。私はあなたが何を話しているのか分からなかったので、ちょうどあなたが酸のユーザーであると思っていたので、ちょっと困惑しました – Popeye

+0

@Pillar他 - フィードバックありがとうございました。新しいコードをテストしましたが、今は意図したことをするようです。 – OldCurmudgeon

関連する問題