迁移到java11 ClassCastException

时间:2019-02-10 16:52:43

标签: java java-8 migration java-11

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

它包含下一行:

inline

在java8上可以正常使用,但是在尝试在java11上启动后,我得到了ClassCastException

  

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

是否可以在不修改库的情况下解决该问题? AFAIK,Java应该向后兼容,所以也许某些命令行参数可能会有所帮助?

谢谢

1 个答案:

答案 0 :(得分:3)

Java向后兼容。查看ClassLoader.getSystemClassLoader() in Java 8表示它还原了ClassLoader实例,而不是URLClassLoader实例。 ClassLoader.getSystemClassLoader() in Java 11也是如此。因此,永远无法保证ClassLoader.getSystemClassLoader()返回URLClassLoader


据我所知,没有办法将ClassLoader转换为URLClassLoader。解决此问题的唯一正确方法是编写该库的维护者,并告诉他们他们依赖某些实现细节,而不应该这样做,并要求他们解决此问题。如果很容易解决,并且该项目是开源的,则可以派生该项目,解决问题并创建请求请求。