以下是在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 {
}
}
答案 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)
Synopsys :(反映)
Class.newInstance()
在内部非内部时抛出IllegalAccess
Error
Exception
-public class
状态:6-Fix Understood,bug
优先级:4-Low
提交日期:1999年3月19日