gpt4 book ai didi

java - 反射访问内部类时的异常

转载 作者:行者123 更新时间:2023-11-29 08:17:59 25 4
gpt4 key购买 nike

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

我想知道为什么下面的两种方法有不同的结果。它是错误还是某种 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 {
}
}

最佳答案

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

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

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

Class test.Test can not access a member of class test.TestOut$TestIn with modifiers "private"

问题在于 sun.reflect.ReflectionverifyMemberAccess(..) 方法,它没有考虑封闭类。如果成员(构造函数)是私有(private)的,则访问被拒绝。

关于java - 反射访问内部类时的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2910168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com