java - 你真的在java中使用你的反向域来命名包吗?

标签 java namespaces

很久以前,我一直认为,在java中,为包命名反转你拥有的域是愚蠢和尴尬的。

您在项目中使用哪个包命名?

最佳答案

一旦您了解了约定存在的原因,就不会感到愚蠢或尴尬。

这个方案做了两个重要的事情:

  • 您的所有代码都包含在其他人不会与之发生冲突的包中。您拥有自己的域名,因此它是孤立的。如果我们没有这个约定,很多公司都会有一个“实用程序”包,其中包含“StringUtil”、“MessageUtil”等类。如果你试图使用其他人的代码,它们会很快发生冲突。

  • 它的“反向”特性使得顶层的类目录布局非常狭窄。如果您展开一个 jar,您将看到“com”、“org”、“net”等目录,然后在每个目录下显示组织/公司名称。

(于 2021 年添加)如今,当这种类型的包命名用于第三方库时,这一点变得更加重要,这些库在构建过程中被引入,并且如果名称不是唯一的,则很容易发生冲突。如果每个人都遵守相同的约定,就不会发生意外碰撞。

(2021 年添加)相同的命名约定可用于应用商店中的应用程序 ID,以确保唯一性。

我们通常不会扩展 jar,但在早期的 java 开发中,这很重要,因为人们使用扩展的 dir 结构来进行小程序。

但是,现在这很好,因为源代码目录结构具有非常“自上而下”的感觉。您从最通用的(com、org、net...)到不太通用的(公司名称)再到更具体的(项目/产品/lib 名称)。

关于java - 你真的在java中使用你的反向域来命名包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/189209/

相关文章:

java - 尝试仅使用嵌套的 for 循环(Java)打印一个边上有线条的递增数字金字塔

.net - 重新排序 wsdl :definitions in an ASP. NET Web 服务

java - 虚拟机上的类加载器

java - 报告引擎还是自己的报告?

c++ - 使用 C++ 并尝试 "nest"一些代码

c++ - "std::transform"在多个编译器上没有限定名称查找的情况下编译?

C++ 如何解决 header 中的命名空间未定义的问题?

visual-c++ - 在 C++/CLI 中嵌套命名空间

java - 生成值和键来填充 map ,以及我应该使用哪种类型的 map

java - 如何创建扩展类的实例?