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