我相信大家都知道,可以通过购买像“somedomain.org”这样的域名为他们的Java产品命名包,在这种情况下,包将遵循“org.somedomain.packagename”模式(相关来源:http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html)。
但是,对于那些没有域名的人,可以使用电子邮件地址作为替代方案。例如,名叫John Bob Doe的人可能创建了一个GMail帐户,例如“john_bob_doe@gmail.com”,因此会将其名称命名为:“com.gmail.john_bob_doe”和“com.gmail.jon_bob_doe。 someinnerpackage“
这一切都很好,但是如果他的电子邮件地址是“john-bob-doe@gmail.com”会怎么样?好吧,根据上面的链接,在带有连字符的名称的情况下,我们可以用下划线替换连字符。因此,再次:“com.gmail.john_bob_doe”和“com.gmail.jon_bob_doe.someinnerpackage”。
现在这里是“真正的”问题:如果他的电子邮件地址是“john.bob.doe@gmail.com”会怎样?包装命名应该是“com.gmail.john.bob.doe”吗?或者也许是“com.gmail.doe.bob.john”?基本上,问题是:在“@”符号之前,当他们的电子邮件地址包含句点时,如何命名他们的包?
推理:我有一个这样的电子邮件地址,我想用它来命名项目的包。
答案 0 :(得分:3)
请注意Java包的命名约定就是这样;约定。您可以随心所欲地命名它们。唯一强制执行的是.
描述文件系统中编译器查找源的子目录。
另请注意,至少使用Gmail,电子邮件中会忽略.
。因此myname@gmail.com
和my.name@gmail.com
是等效的。因为它们是等效的,所以com.gmail.myname
将是与此类电子邮件地址关联的适当程序包名称。
使用域名/电子邮件地址的原因是它们是(可能)避免包的命名空间冲突的便捷方式。但是,通过本地IDE中提供的现代重构技术,这不应成为进步的阻碍因素。选择一个非顶级域名前缀,并根据需要为您的程序或库命名rogue.my.awesome.java.program
。
最后,请注意,将您的软件包命名为com.google.myname
,意味着Google开发了该软件包。出于这个原因,大多数程序员在建立一些屏幕名称或缩短他们的实际名称作为在线状态时付出了一些努力,以便他们可以将其用作此项目和类似项目的前缀:myname.awesome.java.program
。这满足了对命名的优雅次要关注:如果在遇到来源时您知道联系谁,那么您就会有问题。
答案 1 :(得分:2)
没有一种正确的方法可以做到这一点。
您需要记住的是这个关于包名称形成的约定/指导的目的......:
最大限度地降低彼此独立开发的Java代码库之间意外包名冲突的风险,
传达有关您正在创建的名称空间的“拥有”者或信息的一些信息。
从这个角度来看,com.gmail.john.bob.doe
或com.gmail.doe.bob.john
同样可以最大程度地降低碰撞风险,并且智能人员认为com.gmail
(即Google)拥有名称空间的风险很小。
使用下划线违反了一般的Java标识符命名约定......我建议不要使用