Java -构建类路径和运行时类路径优先级相同的类



我不是Java专家,我对冲突情况下的类解析有疑问。考虑这样一个场景,我有两个jar文件external-library-0.0.1, external-library-0.0.2,它们都有一个类Foo

如果我在构建类路径中仅使用external-library-0.0.1.jar构建,然后在运行时类路径中添加external-library-0.0.2.jar,将使用哪个类Foo ?

将使用运行时类路径上的那个。
另一个是JVM在运行时不知道的。

如果有任何差异(例如一个方法不存在),你将在运行时得到一个错误。

从程序员的角度来看,假设是随机的。永远不要在类路径中放置同一个类的多个定义,无论是在编译时还是在运行时。

可以指出,有时有些工具试图提供关于加载顺序的保证,但依赖于它会使您的应用程序本质上很脆弱,当您需要时,这种错误真的很难修复。

最新更新