java.lang.IllegalAccessError:尝试从类Entity访问字段ConcreteEntity.instance
好的,这是交易.我试图访问ConcreteEntity.instance哪个是默认情况下存在的访问类型默认的字段,ClassLoader并且Entity.getInstance是子项中存在的方法ClassLoader.
现在请记住,他们都在同一个包中,但是IllegalAccessError正在抛出.有没有解决这个问题,不涉及我的实际加载内同一实体类的解决方案ClassLoader为ConcreteEntity?
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 相同的运行时包中的类声明.
| 归档时间: |
|
| 查看次数: |
14523 次 |
| 最近记录: |