我有一个实现IAssembly的类Assembly。
启动应用程序时,我看到以下错误。
汇编代码
启动应用程序时,我看到以下错误。
Caused by: java.lang.IllegalAccessError: class <Assembly > cannot access its superinterface <IAssembly>
at java.lang.ClassLoader.defineClass1(Native Method)
汇编代码
class package.Assembly implements IAssembly {
}
IAssembly
interface IAssembly { //note -this is not public, so uses default protected
}
Assembly和IAssembly存在于两个不同的jar包中。这两个jar包被不同的类加载器加载。Assembly类在子类加载器中加载,而IAssembly则在父类加载器中。类加载器使用链接。
通常情况下,这样做是有效的。但当我使用cobertura对jar包进行了检测后运行我的应用程序时,就会出现错误。如果没有检测,一切都正常。cobertura检测导致了这种错误吗?还是说本来就存在错误,只不过cobertura让这种错误更快地暴露了出来。
将接口“public”后,错误消失了。
package_example
的包被定义为:A/package_example/classA
、B/package_example/classB
。当然,为了使其正常工作,A
和B
都必须在类路径中。 - Evgeni Sergeev