相关疑难解决方法(0)

在同一个包中访问私有内部类

我有两个编译单元:

public class OuterClass{

    private static class InnerClass{

        public String test(){
            return "testing123";
        }
    }

    public static void main( String[] args ){
        new CallingClass().test( new InnerClass() );
    }
}


public class CallingClass{

    public void test( Object o ){
        try{
            Method m = o.getClass().getMethod( "test" );
            Object response = m.invoke( o );
            System.out.println( "response: " + response );
        }
        catch( Exception e ){
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它们在同一个包中,一切正常并且打印出"response:testing123".如果它们位于单独的包中,则抛出IllegalAccessException.

据我所知,抛出异常是因为CallingClass无法调用私有的InnerClass方法.但我不明白为什么在同一个包中允许它?InnerClass不受包保护.即使它在同一个包中,也不应在OuterClass外看到Private.我理解错了吗?

java reflection visibility inner-classes

11
推荐指数
1
解决办法
1939
查看次数

标签 统计

inner-classes ×1

java ×1

reflection ×1

visibility ×1