FULL PRODUCT VERSION :
java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
Invoking a method declared in anonymous inner class in another package yields IllegalAccessException.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Executable test case provided.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
failFunction() executes successfully.
ACTUAL -
Exception in thread "main" java.lang.IllegalAccessException: Class pkg1.MainClass can not access a member of class pkg2.SecondClass$1 with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.checkAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at pkg1.MainClass.main(MainClass.java:7)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
--- pkg1\MainClass.java -------------------
package pkg1;
import pkg2.SecondClass;
public class MainClass {
public static void main(String[] args) throws Exception {
Object innerClassInstance = SecondClass.innerClassInstance;
innerClassInstance.getClass().getMethod("failFunction").invoke(innerClassInstance);
}
}
--- pkg2\SecondClass.java -------------------
package pkg2;
public class SecondClass {
public static Object innerClassInstance = new Object() {
public void failFunction() {
System.out.println("Hello World!");
}
};
}
---------- END SOURCE ----------