为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

再次首先感谢各位的回答与讨论,@临风的答案与实际情况是最接近的。我的解决办法如下:
ClassB:
static{
try{
Methodmethod=URLClassLoader.class.getDeclaredMethod("addURL",URL.class);
method.setAccessible(true);
URLurl=B.class.getProtectionDomain().getCodeSource().getLocation();//B和C所在的jar
method.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();
}
}
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 878 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号