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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA:与相同的包冲突和类名称存在于不同的源文件夹下相关的知识,希望对你有一定的参考价值。

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

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

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

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

另一答案

你有2个选择:

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

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

以上是关于JAVA:与相同的包冲突和类名称存在于不同的源文件夹下的主要内容,如果未能解决你的问题,请参考以下文章

java23

java中的包(package)

Java eclipse中创建项目以后缺省包和命名的包有啥区别?

Java 包(package)

Java基础10—类的高级特性

Java基础10—类的高级特性