当前位置: 首页 > 知识库问答 >
问题:

迁移到java11 ClassCastException[重复]

欧博简
2023-03-14

我有一个用于java程序的库。

它包含下一行:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader();

它在java8上运行正常,但在我尝试在java11上启动它之后,我得到了ClassCastException

JAVAClassCastException:类jdk。内部的加载器。ClassLoaders$AppClassLoader不能强制转换为java类。网URLClassLoader

有可能解决这个pb而不修改库吗?AFAIK,Java应该向下兼容,所以也许一些命令行参数可能会有帮助?

谢谢你

共有1个答案

通安宁
2023-03-14

Java是向后兼容的。查看Java8中的ClassLoader.getSystemClassLoader()显示它返回一个ClassLoader-实例,而不是URLClassLoader-实例。Java11中的ClassLoader.getSystemClassLoader()也是如此。因此,从来没有任何保证ClassLoader.getSystemClassLoader()返回一个URLClassLoader

据我所知,没有办法将ClassLoader转换为URLClassLoader。解决这个问题的唯一正确方法是给库的维护人员写信,告诉他们他们依赖于一些实现细节,他们不应该这样做,并要求他们解决这个问题。如果这是一个简单的修复,并且项目是开源的,那么您可以分叉项目,修复问题,并创建一个pull请求

 类似资料:
  • Angular 是使用 TypeScript 构建的,并且支持向 Angular 提供元信息的装饰器。 TypeScript 的装饰器会让语法感觉更加“自然”,尽管有可能使用 Angular 没有的功能。

  • Redux 不是一个单一的框架,而是一系列的约定和一些让他们协同工作的函数。你的 Redux 项目的主体代码甚至不需要使用 Redux 的 API,大部分时间你其实是在编写函数。 这让到 Redux 的双向迁移都非常的容易。 我们可不想把你限制得死死的! 从 Flux 项目迁移 Reducer 抓住了 Flux Store 的本质,因此,将一个 Flux 项目逐步到 Redux 是可行的,无论你使

  • 我正试图迁移到AndroidX,我们在我们的项目中使用这个库。然而,这目前在我们的项目中引起了一个问题: 无法解析对“module @ build type/compile class path”的依赖项:无法使用转换JetifyTransform转换文件“localytics-1.3.0.aar”以匹配属性{artifactType=processed-aar} 删除库会使此问题消失。在这个库被

  • 如果你现在有一个正在使用其他 VCS 的代码库,但是你已经决定开始使用 Git,必须通过某种方式将你的项目迁移至 Git。 这一部分会介绍一些通用系统的导入器,然后演示如何开发你自己定制的导入器。 你将会学习如何从几个大型专业应用的 SCM 系统中导入数据,不仅因为它们是大多数想要转换的用户正在使用的系统,也因为获取针对它们的高质量工具很容易。 Subversion 如果你阅读过前面关于 git

  • 对于 iOS 自动化,Appium 依赖苹果提供的系统框架。对于 iOS 9.2 及更低版本,苹果唯一的自动化技术被称为UIAutomation,它运行在 “Instruments” 中。从 iOS 10 开始,苹果已经完全删除了 UIAutomation 工具,因此 Appium 不可能按照以前的方式进行测试。同时,苹果推出了一款名为 XCUITest 的新型自动化技术,从 iOS 9.3 到

  • 关于此文档 SQLAlchemy 2.0为核心组件和ORM组件中的各种关键SQLAlchemy使用模式带来了重大转变。这个版本的目标是对SQLAlchemy早期以来的一些最基本的假设做一点小小的调整,并提供一个新的简化的使用模型,这个模型希望在核心和ORM组件之间更加简洁和一致,并且更加有能力。Python从python3变成python3以及python3逐渐出现的类型系统是这种转变的最初启示,