如何避免 Java 中的类和包之间的名称冲突?

Posted

技术标签:

【中文标题】如何避免 Java 中的类和包之间的名称冲突?【英文标题】:How can I avoid a name conflict between a class and a package in Java? 【发布时间】:2011-11-07 05:52:36 【问题描述】:

我有两个项目,MainCore。我有一个名为com.package.Sample 的包(及其内容)和一个名为Sample 的包com.package 中的类。如果我将两者都包含在Main 中,我会遇到一个无法解决的错误 - 在我的实际情况下,它是无法解决的Sample 类。我们有 ant 脚本可以构建并且一直有效。

但是,仔细检查每个项目的要求后,我注意到我可以将包 com.package.Sample 连同其在 Main 中的依赖项一起移动到 Core 中。 Sample 类在技术上属于 Main 内部,所以我没有移动它。这使我能够在 Eclipse 中成功构建。

我想知道的几件事:

这在大型项目中很常见吗? 这种情况的最佳方法是什么?在检查冲突之前,我认为最好的解决方案是重构 Sample 类。 但是,如果我无法将包裹 com.package.Sample 移出 Main。我该怎么办?或者这是一个永远不会建立的案例?

【问题讨论】:

【参考方案1】:

分别回答你的问题:

我不知道这在大型项目中是否常见,我认为不会。如果代码库被设计为导致名称冲突(尤其是在 Java 中,这使得解决此类问题变得容易),那么大型项目可能永远不会变大。 如果名称具有适当的描述性,我不会重构 Sample 类。但是,我会用所有小写字母命名我的包(和子包)。你暗示这是一个小项目,所以我猜你可以控制命名。在我的回忆中,我从未见过在包名中使用任何大写字母的 Java 代码(商业或开源)。由于 Java 中的约定是使用 Pascal 大小写或骆驼大小写或任何您想要调用的名称,因此如果您遵循该约定,您将永远不会发生类/包名称冲突。 当然会构建。很容易修复。由于您使用的是 Eclipse,您应该能够在资源管理器中右键单击包,选择“重构”,将名称更改为小写,然后就可以完成了。

祝你好运!

【讨论】:

我不知道包的命名约定,很高兴知道。实际上,我的问题是类和包都是小写的,这似乎意味着应该重构类以遵循类命名约定。 非常出色...只要解决了问题并且您学到了一些东西,这就是胜利。【参考方案2】:

包名应全部小写,类名应以大写开头。遵循这种做法可确保永远不会发生您描述的问题。

【讨论】:

以上是关于如何避免 Java 中的类和包之间的名称冲突?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 cmake 子项目中的名称冲突?

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

从多个来源获取数据时如何避免重复的类和方法名?

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

在 git 中,如何避免将较小的更正合并到在原始内容的每一行之间插入一行新内容的分支中的冲突?

java基础知识