迁移到 java11 ClassCastException

Migration to java11 ClassCastException

我有一个库,我曾经在我的 java 程序中使用过。

它包含下一行:

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

它在 java8 上工作正常,但在我尝试在 java11 上启动它后我得到了 ClassCastException

java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader

是否可以在不修改库的情况下解决这个pb?据我所知,Java 应该是向后兼容的,所以也许一些命令行参数可能有帮助?

谢谢

Java 向后兼容。看着ClassLoader.getSystemClassLoader() in Java 8 shows that it returs a ClassLoader-instance, not a URLClassLoader-instance. The same is true for ClassLoader.getSystemClassLoader() in Java 11。因此,从来没有任何保证 ClassLoader.getSystemClassLoader() returns 和 URLClassLoader.


据我所知,无法将 ClassLoader 转换为 URLClassLoader。解决这个问题的唯一正确方法是写信给库的维护者,告诉他们他们依赖于一些实现细节,他们不应该这样做,并要求他们解决这个问题。如果它很容易修复并且项目是开源的,您可以分叉项目、修复问题并创建拉取请求。