java.lang.IllegalAccessError:无法访问类

问题描述 投票:0回答:1

考虑以下 Java 类结构:

public class myClass {
  class myInnerClass {}
}

使用命令

javac myClass.java
编译后,生成两个类文件:
myClass.class
myClass$myInnerClass.class

我有 2 个文件:

myClass.class
myClass$myInnerClass.class

在单独的

Main.java
文件中,我使用
URLClassLoader
动态加载
myClass.class
并从中执行涉及使用
myInnerClass
的方法。但是,我遇到了以下错误:

java.lang.IllegalAccessError: failed to access class myClass$myInnerClass from class myClass (myClass$myInnerClass is in unnamed module of loader 'app'; myClass is in unnamed module of loader java.net.URLClassLoader @41cf53f9)

如何解决这个问题?

我尝试在使用

classpath
时修改
module path
URLClassLoader
以确保正确的模块可访问性。

我希望动态加载的

myClass
能够成功访问和利用
myInnerClass
,而不会遇到
IllegalAccessError
。然而,尽管我尝试了,问题仍然存在。

java class
1个回答
0
投票

在您的代码示例中,myInnerClass 是 myClass 的非静态内部类。您需要通过以下方式实例化它:

myClass outerObject = new myClass();
myClass.myInnerClass innerObject = outerObject.new myInnerClass();

您会得到

java.lang.IllegalAccessError
,因为您正在从不允许的上下文访问非静态内部类。您还可以将内部类设为静态,然后尝试 myInnerClass 是否不依赖于 myClass 的状态。

在此处阅读嵌套类的访问规则。

© www.soinside.com 2019 - 2024. All rights reserved.