具有唯一名称的java包的目的是什么?

时间:2017-07-23 01:18:23

标签: java packages

每当我看Java教程时,他们总是用com或org开始他们的包名,这与开发者的域有关。但是,我没有达到这样做的总体目的,因为我不明白如何使用唯一的包名影响任何东西。为什么不把它命名为什么而不用担心其他人是否将其包装命名为与您的相同?为什么重要?

3 个答案:

答案 0 :(得分:1)

  

具有唯一名称的java包的目的是什么?

目的是避免意外命名不同代码库之间的冲突,以及由此引起的问题;见下文。

  

为什么不直接命名[包裹],不要担心其他人是否将您的包装命名为与您的相同?为什么重要?

这就是很多人所做的。他们忽略了这个问题。

但是,假设您(或其他人)需要将两个代码库组合在一起,导致包名称冲突的包名很差或不幸。

  • 新课程将出现在原始作者未预料到的包装中。
  • 会出现新的隐式导入,可能导致编译错误或意外的意外更改。 (例如,假设一个代码库定义了自己的Class类。)
  • 可能存在完全限定类名的冲突。在这种情况下,一个班级会“隐藏”另一个班级。
  • 使用基于包名称的反射来查找组件的代码可能会中断。
  • 由于出现意外资源或隐藏资源,类加载器资源位置可能会中断。
  • 至少精心设计的包裹和子包装组织将会搞砸。例如,类会出现在javadocs中的包中,这些包没有像以前那样有意义。

为了解决这个问题,您/他们必须重新设计代码以避免程序包名称冲突的最坏影响。不可否认,现代IDE的重构支持可以完成大多数工作......如果你按照正确的顺序做事。但不是全部;例如javadoc中的反射,资源和引用。

然后你遇到了维护代码库的问题,该代码库与其至少一个组件的原始版本完全不同。像git更改集合最有可能的工具将不再适应......假设您通过更改包名来解决问题。您必须手动应用“上游”的任何更改,或者根本不跟踪它们。

在我看来,最后一次可能是碰撞最令人不安的后果。

由于有一种简单的方法可以提前避免/最小化风险,因此这样做是有意义的。

(就像穿在车上的安全带......)

答案 1 :(得分:-1)

因为如果它们都有相同的名称,那么只有一个包,而不是'包'。

答案 2 :(得分:-3)

我现在明白了。这是为了公司想要分发他们的工作供他人使用。如果他们将库中的包命名为与其他人的库相同,那么同时使用这两个库会产生导入冲突。 我不明白的一件事是游戏开发者为什么这样做,除非他们希望有人能够将他们的代码用作库。我的猜测是,他们看到其他公司这样做,并觉得有必要自己做,即使这不是完全必要的。