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 ----------
|