9

我刚刚开始学习 Java SE 并且对包名称的通常 Java 约定没有问题,例如com.example.library_name_here.package_name_here

除了。

我一直注意到在一些相当知名的软件包中未能遵守这一点。

  • J线jline.*
  • 雅各布:(com.jacob.*没有 jacob.com
  • JNA:(com.sun.jna.*网站上的免责声明说注意:Sun 不赞助这个项目,即使包名称 (com.sun.jna) 可能暗示其他情况。)

所以我想知道,是否存在通常的反向域名约定失效的情况,并且有很好的方法来解决它?我能想到的唯一情况是围绕域名所有权问题(例如,您更改项目托管/域名,或者已经有一个众所周知的包对您的域具有“抢注权”,或者您对域的所有权运行出去&别人抢购它)。

编辑:如果我使用我公司的域名,并且我们被收购或分拆,我们应该如何处理包名?保持它们相同或重命名?(我认为从引用包的编译类然后丢失的角度来看重命名是不好的)

4

6 回答 6

12

这是一个命名约定。没有真正的要求甚至期望包名映射到域名。

于 2009-01-07T16:24:08.347 回答
5

一般的想法是两个组织不会拥有同一个域,因此将域名用作包的一部分可确保没有命名空间冲突。然而,这只是一个建议。

有人有充分的理由在 sun 命名空间中拥有包。如果他们提供公共 API 的实现,通常需要在 API 的命名空间中实现类。

于 2009-01-07T16:39:22.233 回答
3

如果您正在逐步提高 Java 学习曲线,我会更担心使您的打包结构清晰,以便您可以轻松找到所需的类。

于 2009-01-07T17:21:28.793 回答
2

Packages are used to avoid ambiguity and collisions between components built by various entities. As long as you follow the convention, and nobody illicitly uses your slice of the package namespace pie, you shouldn't need to worry about what others have used.

于 2009-01-07T18:15:06.500 回答
1

唯一重要的事情(恕我直言)是包名称的部分按重要性“排序”,即您不会以 gui.myprog、util.myprog、main.myprog 结尾,而是以 myprog.gui、myprog 结尾.util 和 myprog.main。包名是否真的以顶级域开头,后跟域名与我无关。

于 2009-01-07T16:23:06.523 回答
1

您不能将语言关键字用作包名称的一部分,这是无法应用域名约定的另一种情况 - LONG Building Technologies运气不好

但是,约定就是这样,约定,它存在的唯一原因是它最大限度地减少了不同项目意外选择相同包名称的可能性。如果你跟不上,那也不是什么大问题。

于 2009-01-07T16:24:44.867 回答