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

在Java中如何避免类和包之间的名称冲突?,java,naming-conventions,package,classname,Java,Naming Conventions,Package,Classname,我有两个项目,Main和Core。我在packagecom.package.Sample中有一个名为com.package的包(以及它的内容)和一个名为Sample的类。如果我在Main中同时包含这两个类,我会遇到一个错误,其中一个无法解析-在我的实际情况中,无法解析的是Sample类。我们有构建的ant脚本,并且一直有效 然而,仔细检查每个项目需要什么,我注意到我可以将包com.package.Sample移动到Core以及Main中的依赖项中。Sample类在技术上属于Main内部,所以我没

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

然而,仔细检查每个项目需要什么,我注意到我可以将包
com.package.Sample
移动到
Core
以及
Main
中的依赖项中。
Sample
类在技术上属于
Main
内部,所以我没有移动它。这使我能够在Eclipse中成功构建

有几件事我很好奇:

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

分别回答您的问题:

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

祝你好运

包名应全部小写,类名应以大写开头。遵循此实践可确保不会出现您所描述的问题。

我不知道包的命名约定,这很好。事实上,我的问题是类和包都是小写的,这似乎意味着类应该按照类命名约定进行重构。很好……只要它是固定的,并且你学到了一些东西,这就是胜利。