Mit*_*ski 3 java java-native-interface casting classloader javax.imageio
以下是问题的简化版本:
SomeClass c = (SomeClass) obj.getSomeClassParent()
Run Code Online (Sandbox Code Playgroud)
并非总是如此,有时会触发异常
org.somepackage.SomeClass can't be cast to org.somepackage.SomeClass
Run Code Online (Sandbox Code Playgroud)
这怎么可能 ?我想这与JAI imageio是本机lib的事实有关,但是中继怎么会发生这种情况?我可能错过了什么,但是什么?
I'm using JAI imageio version 1.1
dcm4che 2.0.21 DICOM lib
Run Code Online (Sandbox Code Playgroud)
这是原始代码
ImageInputStream iis = ImageIO.createImageInputStream(src);
Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");
ImageReader reader = iter.next();
DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam();
Run Code Online (Sandbox Code Playgroud)
而原来的例外
org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam can't be cast to
org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam
Run Code Online (Sandbox Code Playgroud)
我想如果可能会发生
SomeClass实例是由类加载器加载X(所以它的类是SomeClassCL X或让我们叫它:CL(X).SomeClass)SomeClass实际上是CL(Y).SomeClass所以你有了:
CL(X).SomeClassCL(Y).SomeClass或者换句话说 - 不是同一个类 - 因此类强制转换异常.
在转换为同一个类时可能重复:ClassCastException - 它也有一些很好的建议.
| 归档时间: |
|
| 查看次数: |
2705 次 |
| 最近记录: |