小编Pep*_*itz的帖子

无法从不同jar中的同一个包访问超类的受保护成员

我有一个奇怪的问题,当我试图插入我的程序时,我无法弄清楚这个问题.另一个问题是我无法创建一个简单的测试用例,因为每次我尝试它都有效.必须有一些我不知道的并发症.但我会尽可能清楚地描述情况,以防任何人听起来很熟悉.

我有一个名为Seed的基类,它是主应用程序的一部分,由系统类加载器加载.我有一个插件,其中包含一个类Road,它是Seed的子类.它在运行时从单独的jar文件加载.Road类引用了Seed.garden字段,其定义为:

保护最终花园;

请注意,我没有收到编译错误.当插件jar包含在系统类路径中时,我也不会遇到运行时错误.只有当我的主应用程序使用新的类加载器(系统类加载器作为其父类)加载插件时才会出现错误.错误是:

java.lang.IllegalAccessError:尝试从类package.Road $ 4访问字段package.Seed.garden

它必须与子类已被不同类加载器加载而不是超类这一事实有关,但我找不到任何官方原因,为什么它不起作用.另外,就像我说的,当我尝试用一​​个简单的测试案例(包括独立的罐子,用不同的类加载器加载的子类,等等)来重现问题,我没有得到这个错误.

我也不太可能违反访问规则,因为当类由同一个类加载器加载时它可以工作,而且我没有得到编译错误.

我没有想法!有没有人认识到这个问题,或者有一些指示我的方向可以看?救命!

java inheritance jar

12
推荐指数
1
解决办法
2951
查看次数

标签 统计

inheritance ×1

jar ×1

java ×1