Java的包命名约定有什么意义?


14

我不明白为什么Java使用(可能是假想的)域名的相反名称作为程序包的名称,而大多数人使用的域名与其所拥有的产品之间却没有任何联系。许多开发人员甚至没有任何领域。

此命名约定的原因是什么(如果有)?


即使没有域,在Java领域也通常会假装您进行软件包命名。例如,根据您的情况,您将使用com.louisrhys.xxx.yyy自己是否拥有louisrhys.com
Wayne Molina,

Answers:


14

全球唯一性。如果每个人,或者至少是认真地在内部项目之外分发其代码的开发人员,都遵守该约定,那么当您向项目中添加另一个第三方库时,名称冲突就永远不会发生。请记住,Java最初是作为一种代码部署解决方案进行传播的,可随时随地(通过applet和Internet上的远程类加载)进行部署。


3
在Java 1.4中,Sun使用了开源Apache XML工具,而没有更改名称空间。尝试在自己的应用程序中拥有更新的版本变得“有趣”。

3
Java was initially propagated as a solution for code deployment anywhere, anytime 与现在的Java相反?我不了解您,但是我仍然可以成功地使用Java WebStart将客户端代码部署到内部网络中的数千台PC上。这使得“尽早发布,经常发布”对每个人的痛苦要小得多。
maple_shaft

1
不一定正确。您最终将失去域名;无论是死去还是忘记更新。其他人可能会购买它,而没有意识到,却推出了一个与您的冲突的Java软件包。而且还可能有人在您之前拥有该域并发布与您的代码冲突的代码。
凯文

@maple_shaft自从Java applet的衰落以来,对于大多数用户而言,这并不是一直如此。相反,它只是另一个应用程序平台(例如Qt或XUL或Electron)。
user253751 '16

12

就像维基百科所说的那样,

“ Java语言规范建立了包命名约定,以避免两个发布的包具有相同名称的可能性。”


规范中是否详细说明了如果开发人员没有自己的域名时要使用的约定?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner:不,不是
麦克·西摩

@MikeSeymour:所以...在这种情况下,我们可以命名,但要使用它们吗?oo!:)
FrustratedWithFormsDesigner

1
@FrustratedWithFormsDesigner在任何情况下都可以根据需要命名。如果您希望其他人使用您的软件,则应遵循规范,并在没有实际域的情况下推断出逻辑上可能唯一的名称空间。
杰里米(Jeremy)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.