反复访问内部类时的异常

时间:2010-05-26 05:06:18

标签: java reflection

以下是在Java 1.5中测试的示例程序。

我想知道为什么下面两种方法会有不同的结果。它是一个bug还是一种Java特性?

package test;

public class TestOut {
    public static void main(String[] args) {
        // works
        new TestIn();

        // throws IllegalAccessException
        Class.forName("test.TestOut$TestIn").newInstance();
    }

    private static class TestIn {
    }
}

2 个答案:

答案 0 :(得分:3)

该类是私有的,因此IllegalAccessException - 您可以使用:

Class cls = Class.forName(...);
Constructor c = cls.getDeclaredConstructors()[0];
c.setAccessible(true);
c.newInstance();

对于记录,异常有一条消息,这是一个非常具有描述性的消息。下次不要从问题中省略这些信息。 (实际上,我不确定Java 1.5上是否存在此消息,是吗?)

  

Class test.Test无法访问类test.TestOut $ TestIn的成员,修饰符为“private”

问题在于verifyMemberAccess(..)的{​​{1}}方法,并没有考虑封闭的类。如果成员(构造函数)是私有的,则拒绝访问。

答案 1 :(得分:2)

这是Bug ID 4221909

  

Synopsys :(反映)Class.newInstance()在内部非内部时抛出IllegalAccess Error Exception - public class
  状态:6-Fix Understood,bug
  优先级:4-Low
  提交日期:1999年3月19日