Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迁移到java11 ClassCastException_Java_Java 8_Migration_Java 11 - Fatal编程技术网

迁移到java11 ClassCastException

迁移到java11 ClassCastException,java,java-8,migration,java-11,Java,Java 8,Migration,Java 11,我有一个用于java程序的库 它包含下一行: URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader(); 它在java8上运行正常,但在我尝试在java11上启动它之后,我得到了ClassCastException java.lang.ClassCastException:类 无法将jdk.internal.loader.ClassLoaders$AppClassLoader强制转换为 类java.net.U

我有一个用于java程序的库

它包含下一行:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader();
它在java8上运行正常,但在我尝试在java11上启动它之后,我得到了ClassCastException

java.lang.ClassCastException:类 无法将jdk.internal.loader.ClassLoaders$AppClassLoader强制转换为 类java.net.URLClassLoader

是否可以在不修改库的情况下解决此pb?好吧,Java应该是向后兼容的,所以一些命令行参数可能会有所帮助


谢谢

Java是向后兼容的。查看显示它返回的是一个
ClassLoader
-实例,而不是
URLClassLoader
-实例。同样的道理也适用于中国。因此,
ClassLoader.getSystemClassLoader()
不会返回
URLClassLoader



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

这一更改是在java-9中引入的,并且从来没有官方规范说应用程序类加载器必须是
URLClassLoader
的实例,因此这里没有向后兼容性。如果您需要帮助,还可以解释一下您对生成的类加载器所做的操作。Java 9带来的一些更改使一些假设无效。这是其中一个假设。也许有解决办法,但很可能库需要更新。相关帖子:不幸的是,不是我的代码使用了
URLClassLoader
,我不能直接修改它:(好吧……我希望你已经通过一些接口将foreing库从你的核心应用程序中隔离出来,现在可以切换到另一个实现或实现你自己的:)