gpt4 book ai didi

Java 转换/类加载器问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:47 24 4
gpt4 key购买 nike

这是问题的简化版本:

 SomeClass c = (SomeClass) obj.getSomeClassParent()

不总是,但有时会触发异常

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

这怎么可能?我想这与 JAI imageio 是 native 库这一事实有关,但请中继这是怎么发生的?我可能遗漏了什么,但是什么?

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

最佳答案

我认为如果

  1. 一个 SomeClass 实例是从 ClassLoader X 加载的(所以它的类是 CL X 的 SomeClass 或者我们称它为:CL(X).SomeClass)
  2. 但它是在不同的类加载器中转换的。例如。当前的 Threads 类加载器是 Y 所以 SomeClass 实际上是 CL(Y).SomeClass

所以你有:

  • 实例类 = CL(X).SomeClass
  • class cast target = CL(Y).SomeClass

或者换句话说 - 不是同一个类 - 因此类转换异常。


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

关于Java 转换/类加载器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2029674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com