Tho*_*ler 5 java classloader java-ee
我们有一个Map带有Class对象的cache()TestClass.另一个类加载器TestClass再次在运行时初始化/加载,因此下面的代码会抛出一个ClassCastException:
TestClass obj1 = (TestClass)map.get("key"); // throws a ClassCastException
Run Code Online (Sandbox Code Playgroud)
好吧,到目前为止,我确实理解这个问题.
所以,我试图找到背景信息为什么TestClass.class不等于TestClass.class.我假设不同的类加载器为ReferenceType设置了不同的id?有谁能向我解释背景?
我找到的最佳页面:http: //www.objectsource.com/j2eechapters/Ch21-ClassLoaders_and_J2EE.htm
是的,您的研究指向正确的方向:由不同类加载器加载的相同类定义被JVM视为两个不同的类.因此他们之间的铸造失败了ClassCastException.
我认为差异仅仅是因为有两个不同的类令牌对象在起作用.它必须是这样的,因为不同加载器加载的类实际上可能是同一类的不同版本.众所周知,每个类的类令牌都是唯一的(在同一个类加载器领域内,即).如果JVM开始通过各种属性而不是物理相等(==)来比较类令牌,它会打开一堆蠕虫.
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |