JAVA:与相同的包冲突和类名称存在于不同的源文件夹下

问题描述 投票:3回答:2

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

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

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

两个Constants.java中定义的几个常量字符串是相同的,很少是这些类所独有的。现在我在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 package packages directory-structure classname
2个回答
3
投票

Java类的标识是其“绝对”名称,如x.y.z.SomeClass中所示。当你有两个具有绝对相同的包和类名的类时,“java”无法区分它们。

换句话说:这是不好的做法。你真的想避免这种情况。解决方案不是解决“我的工具抱怨”,而是以更符合“标准java约定”的方式组织源代码。

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


2
投票

你有2个选择:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.