JAVA:与同一包冲突,并且 class 名称存在于不同的源文件夹下

JAVA: Conflicts with Same Package and class names present under different Source folders

我正面临与 class 和包名称在不同来源下具有相同名称的冲突。简而言之,目录结构看起来有点像这样:

src/test/java
    com.service.helper
        Constants.java

src/intTest/java
    com.service.helper
        Constants.java
    com.service.utility
        SomethingTest.java

在两个 Constants.java 中定义的少数常量字符串是相同的,并且很少是这些 classes 独有的。 现在我在 src/intTest/java 下有一个 SomethingTest.java 文件,它应该使用 src/intTest/java 下定义的 Constants.java。

但是,它似乎正在使用 src/test/java 包下定义的 Constants.java 文件。因此,我无法使用 src/intTest/java 文件下的 Constants.java 中定义的常量字符串。

谁能解释清楚为什么会这样?我真的可以在不改变当前文件名的包结构的情况下访问src/intTest/java下定义的Constants.java吗?

感谢您的帮助。谢谢。

Java class 的 身份 是它的 "absolute" 名称,如 x.y.z.SomeClass。当您有两个 class 具有绝对 完全相同的 包和 class 名称时,"java" 无法区分它们。

换句话说:这是不好的做法。你真的想避免这种情况。解决方案不是绕过 "my tool is complaining",而是以更符合 "standard java conventions".

的方式组织您的源代码

换句话说:最好的办法是重命名一些包,或者确保具有唯一的 class 名称。

这里有2个选择:

  1. 将常量重命名为 IntConstants(唯一)
  2. (推荐)把intTest(我猜是集成测试)放到它的 自己的包裹。

建议选择 2,因为集成测试不需要与测试 class 在同一个包中,因为它只测试 public API 您的应用程序,不需要访问任何 package-scope 变量。 如果您的情况并非如此,请考虑重构您的代码以使其与良好实践保持一致,并且不要在外部公开内部状态。将集成测试放在不同的包中有助于保持这种做法。