加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java转换/类加载器问题

发布时间:2020-12-15 04:51:52 所属栏目:Java 来源:网络整理
导读:以下是问题的简化版本: SomeClass c = (SomeClass) obj.getSomeClassParent() 并非总是如此,有时会触发异常 org.somepackage.SomeClass can't be cast to org.somepackage.SomeClass 这怎么可能 ?我想这与JAI imageio是本机lib的事实有关,但是中继怎么会发
以下是问题的简化版本:

SomeClass c = (SomeClass) obj.getSomeClassParent()

并非总是如此,有时会触发异常

org.somepackage.SomeClass can't be cast to org.somepackage.SomeClass

这怎么可能 ?我想这与JAI imageio是本机lib的事实有关,但是中继怎么会发生这种情况?我可能错过了什么,但是什么?

I'm using JAI imageio version 1.1 
dcm4che 2.0.21  DICOM lib

这是原始代码

ImageInputStream iis = ImageIO.createImageInputStream(src);
  Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");
  ImageReader reader = iter.next();
  DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam();

而原来的例外

org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam can't be cast to    
org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam

Exception Image http://img215.imageshack.us/img215/3894/exception.jpg

解决方法

我想如果可能会发生

>一个SomeClass实例是从ClassLoader X加载的(所以它的类是CL X的SomeClass或让我们调用它:CL(X).SomeClass)
>但它正在使用不同的类加载器.例如.当前的Threads类加载器是Y所以SomeClass实际上是CL(Y).SomeClass

所以你有了:

> instance class = CL(X).SomeClass
> class cast target = CL(Y).SomeClass

或者换句话说 – 不是同一个类 – 因此类强制转换异常.

可能重复:ClassCastException when casting to the same class – 它也有一些很好的建议.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读