如果两个库的类具有相同的类和包名称以供内部使用

Posted

技术标签:

【中文标题】如果两个库的类具有相同的类和包名称以供内部使用【英文标题】:if two libraries have classes that have the same class& package name for their internal use 【发布时间】:2020-04-20 18:59:58 【问题描述】:

我有两个具有相同包结构的 jar。 他们有一个同名的类。 喜欢..

lib1.jar
   - A.class
   - Same.class
lib2.jar
   - B.class
   - Same.class

其实我没有使用 Same.class 但它被 A 类和 B 类使用

那么,发生了什么?

如果先加载lib1.jar,A.class和B.class只使用lib1.jar中的Same.class?

或者 A & B 会在自己的 jar 中使用不同的 Same.class?

【问题讨论】:

问题:package 名称是否也相同? @TimBiegeleisen ,是的,它们具有相同的包结构,我无法更改它们。 是的,你永远不应该用这种方式构建你的 jars。类加载器只会为每个完全限定名称加载一个类。 如果您曾经将代码模块化(Java 9+),那么您所描述的将是不可能的,因为模块系统不允许拆分包。 【参考方案1】:

如果没有任何特殊的 Class loader 在运行时加载不同的类,则首先加载的类将在两个地方使用。请查看this 了解更多信息。

【讨论】:

以上是关于如果两个库的类具有相同的类和包名称以供内部使用的主要内容,如果未能解决你的问题,请参考以下文章