Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 匿名类、私有方法和反射_Java_Reflection_Anonymous Class_Private Methods - Fatal编程技术网

Java 匿名类、私有方法和反射

Java 匿名类、私有方法和反射,java,reflection,anonymous-class,private-methods,Java,Reflection,Anonymous Class,Private Methods,如果我使用私有方法创建一个匿名类,并尝试使用反射访问该方法,它将抛出IllegalAccessException。但是,如果在将对象保存到变量之前调用该方法,则效果良好: public class Z { public static void main(String[] args) throws Exception { Object obj = new Object(){private void foo(){}}; obj.get

如果我使用私有方法创建一个匿名类,并尝试使用反射访问该方法,它将抛出IllegalAccessException。但是,如果在将对象保存到变量之前调用该方法,则效果良好:

public class Z {
    public static void main(String[] args) throws Exception {

        Object obj = new Object(){private void foo(){}};            
        obj.getClass().getDeclaredMethod("foo").invoke(obj); // throws IllegalAccessException

        new Object(){private void foo(){}}.foo(); // works
    }
}

差异的原因是什么?

在第一种情况下,您试图通过反射来访问该方法,并且由于它是一个私有方法,reflector类无法调用它,因此它抛出了一个
IllegaAccesseException

在第二种情况下,您直接访问该方法,并且您可以这样做,因为它是
Z
的匿名内部类,并且您在
Z
类中访问它