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
类加载器不同,这为什么也能强制转换?
类加载器和强制类型转换没有关系,只要两个类兼容就可以转换。更具体的事情是,一个类和它的父类可以由不同加载器加载。