萌新!Java 不同类加载器如何使用被其他类加载器加载过的类?求解答!

请教各位大佬:
classA和classB是由各自的类加载器加载的,已知A先加载,B后加载。classC与B在同一jar内,同一个类加载器加载。当我在B中调用A的一个方法,参数是C的新实例,就报ClassNotFoundExceptionC,请问该如何解决?谢谢!
补充一点,我在B中调用的A的方法的参数是Object类型的,A本身是完全不知道有C的存在的。
经过实际验证,发现A的ClassLoader是B的ClassLoder的父加载器。
慕沐林林
浏览 879回答 2
2回答

手掌心

再次首先感谢各位的回答与讨论,@临风的答案与实际情况是最接近的。我的解决办法如下:ClassB:static{try{Methodmethod=URLClassLoader.class.getDeclaredMethod("addURL",URL.class);method.setAccessible(true);URLurl=B.class.getProtectionDomain().getCodeSource().getLocation();//B和C所在的jarmethod.invoke(A.class.getClassLoader(),url);//让A的类加载器去BC.jar里加载//其中,只要在这里(B中)显式地加载了ClassC,仍会报错。Classclazz=Class.forName("C",true,A.class.getClassLoader());System.out.println(clazz);A.method(clazz.getConstructor().newInstance());}catch(Throwablee){e.printStackTrace();}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript