【问题标题】:How can I avoid a name conflict between a class and a package in Java?如何避免 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。我该怎么办?或者这是一个永远不会建立的案例?

【问题讨论】:

    标签: java naming-conventions package classname


    【解决方案1】:

    分别回答你的问题:

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

    祝你好运!

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2012-07-21
      • 2019-02-21
      相关资源
      最近更新 更多