我有一个用于Java程序的库。
它包含下一行:
inline
在java8上可以正常使用,但是在尝试在java11上启动后,我得到了ClassCastException
java.lang.ClassCastException:类 无法将jdk.internal.loader.ClassLoaders $ AppClassLoader强制转换为 类java.net.URLClassLoader
是否可以在不修改库的情况下解决该问题? AFAIK,Java应该向后兼容,所以也许某些命令行参数可能会有所帮助?
谢谢
答案 0 :(得分:3)
Java向后兼容。查看ClassLoader.getSystemClassLoader()
in Java 8表示它还原了ClassLoader
实例,而不是URLClassLoader
实例。 ClassLoader.getSystemClassLoader()
in Java 11也是如此。因此,永远无法保证ClassLoader.getSystemClassLoader()
返回URLClassLoader
。
据我所知,没有办法将ClassLoader
转换为URLClassLoader
。解决此问题的唯一正确方法是编写该库的维护者,并告诉他们他们依赖某些实现细节,而不应该这样做,并要求他们解决此问题。如果很容易解决,并且该项目是开源的,则可以派生该项目,解决问题并创建请求请求。