【发布时间】:2019-02-10 16:52:43
【问题描述】:
我有一个以前在我的 java 程序中使用的库。
它包含下一行:
URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader();
它在 java8 上运行正常,但是在我尝试在 java11 上启动它之后,我得到了 ClassCastException
java.lang.ClassCastException: 类 jdk.internal.loader.ClassLoaders$AppClassLoader 无法转换为 类 java.net.URLClassLoader
是否可以在不修改库的情况下解决此问题? AFAIK,Java 应该是向后兼容的,所以也许一些命令行参数可能会有所帮助?
谢谢
【问题讨论】:
-
这个变化是在 java-9 中引入的,并且从来没有官方规范说应用程序类加载器必须是
URLClassLoader的实例,所以这里没有向后兼容性。如果您需要帮助,不妨解释一下您对生成的类加载器做了什么。 -
Java 9 带来了一些改变,使一些假设无效。这是这些假设之一。也许有一种解决方法,但库很可能需要更新。相关帖子:stackoverflow.com/questions/46694600/…
-
不幸的是,不是我的代码使用
URLClassLoader,我不能直接修改它:( -
嗯...我希望你已经通过一些接口正确地将外部库从你的核心应用程序中分离出来,现在可以切换到不同的实现或实现你自己的:)
标签: java java-8 migration java-11