如何避免 Java 中的类和包之间的名称冲突?
Posted
技术标签:
【中文标题】如何避免 Java 中的类和包之间的名称冲突?【英文标题】:How can I avoid a name conflict between a class and a package in Java? 【发布时间】:2011-11-07 05:52:36 【问题描述】:我有两个项目,Main
和 Core
。我有一个名为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 中的类和包之间的名称冲突?的主要内容,如果未能解决你的问题,请参考以下文章