私有内部类访问方法

时间:2016-04-18 13:44:55

标签: java

我做了一个例子来从内部类访问私有方法,我每次都没有找到类异常。

   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

我得到如下例外:

  

线程“main”中的异常java.lang.ClassNotFoundException:   Inner.Private at java.net.URLClassLoader $ 1.run(Unknown Source)

任何帮助都会非常感激。让我知道为什么它忽略了内在阶级或任何洞察力。

1 个答案:

答案 0 :(得分: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);
    }