迁移到 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
。解决这个问题的唯一正确方法是写信给库的维护者,告诉他们他们依赖于一些实现细节,他们不应该这样做,并要求他们解决这个问题。如果它很容易修复并且项目是开源的,您可以分叉项目、修复问题并创建拉取请求。
我有一个库,我曾经在我的 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
。解决这个问题的唯一正确方法是写信给库的维护者,告诉他们他们依赖于一些实现细节,他们不应该这样做,并要求他们解决这个问题。如果它很容易修复并且项目是开源的,您可以分叉项目、修复问题并创建拉取请求。