java.lang.IllegalAccessError:尝试从类Entity访问字段ConcreteEntity.instance

Jus*_*tin 12 java classloader

java.lang.IllegalAccessError:尝试从类Entity访问字段ConcreteEntity.instance

好的,这是交易.我试图访问ConcreteEntity.instance哪个是默认情况下存在的访问类型默认的字段,ClassLoader并且Entity.getInstance是子项中存在的方法ClassLoader.

现在请记住,他们都在同一个包中,但是IllegalAccessError正在抛出.有没有解决这个问题,不涉及我的实际加载内同一实体类的解决方案ClassLoaderConcreteEntity

0 new #14 <Entity>
 3 dup
 4 aload_0
 5 invokevirtual #18 <Adapter.getInstance>
 8 checkcast #20 <sl>
11 getfield #24 <sl.d>
14 invokespecial #25 <Entity.<init>>
17 areturn
Run Code Online (Sandbox Code Playgroud)

通过jclasslib at检索的字节码是"编译后"生成的异常.

谢谢Gamb清理帖子.

Jör*_*ann 29

查看类似问题的回答,除非您的情况很明显,您正在处理多个类加载器:

jvm认为从不同的类加载器加载的类在不同的"运行时包"中,即使它们具有相同的包名.引用jvm spceification,第5.3节:

在运行时,类或接口不是由其名称单独确定,而是由一对确定:它的完全限定名称及其定义的类加载器.每个这样的类或接口都属于单个运行时包.类或接口的运行时包由包名称和类或接口的类加载器定义.

在5.4.4节中:

当且仅当满足以下任一条件时,才能访问类或接口D的字段或方法R.

...

R既可以是受保护的,也可以是包私有的(既不是公共的也不是受保护的,也不是私有的),并且由与D 相同的运行时包中的类声明.