"
tomcat中在实例化Servlet之后,进行了一次强制类型转换是这样的,我打印了一下Servlet类加载器
InstanceManager instanceManager = ((StandardContext)getParent()).getInstanceManager(); try { servlet = (Servlet) instanceManager.newInstance(servletClass); System.out.println("Servlet classloader:"+Servlet.class.getClassLoader()); System.out.println("servlet instance classloader:"+servlet.getClass().getClassLoader()); } catch (ClassCastException e) { ... }
打印的信息是这样的
Servlet classloader:sun.misc.Launcher$AppClassLoader@18b4aac2
servlet instance classloader:ParallelWebappClassLoader
context: my_servlet
delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@2ef9b8bc
类加载器不同,这为什么也能强制转换?
" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/0220c586c6f640bbadac47fe94dd33ab.png)
类加载器和强制类型转换没有关系,只要两个类兼容就可以转换。更具体的事情是,一个类和它的父类可以由不同加载器加载。
![image.png](https://ucc.alicdn.com/pic/developer-ecology/5ea17de6c8f847ba9100cc3f819b4225.png)版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。