Java包名称中的单词分隔符的约定是什么?

时间:2010-07-05 11:49:40

标签: java naming-conventions package

如何在包名中单独添加单词?以下哪项是正确的?

  1. com.stackoverflow.my_package(下划线)
  2. com.stackoverflow.my-package(连字符)
  3. com.stackoverflow.MyPackage(CamelCase)
  4. 一般标准是什么?

6 个答案:

答案 0 :(得分:217)

以下是官方命名惯例文件规定的内容:

  

软件包

     

唯一包名称的前缀始终以全小写ASCII字母书写,应该是顶级域名之一,目前为comedugovmilnetorg或其中一个英文双字母代码,用于标识ISO标准3166,1981中指定的国家/地区。

     

软件包名称的后续组件根据组织自己的内部命名约定而有所不同。此类约定可能指定某些目录名称组件是分区,部门,项目,计算机或登录名。

     

实施例

     
      
  • com.sun.eng
  •   
  • com.apple.quicktime.v2
  •   
  • edu.cmu.cs.bovik.cheese
  •   

参考


请注意,特别是上述文档未指定顶级域前缀后面的任何内容。 JLS也同意这一点,给出以下例子:

  
      
  • com.sun.sunsoft.DOE
  •   
  • gov.whitehouse.socks.mousefinder
  •   
  • com.JavaSoft.jag.Oak
  •   
  • org.npr.pledge.driver
  •   
  • uk.ac.city.rugby.game
  •   

以下摘录也是相关的:

  

在某些情况下,互联网域名可能不是有效的包名。以下是处理这些情况的一些建议惯例:

     
      
  • 如果域名包含连字符或标识符中不允许的任何其他特殊字符,请将其转换为下划线。
  •   
  • 如果任何生成的包名称组件是关键字,则将下划线附加到它们。
  •   
  • 如果任何生成的包名称组件以数字或任何其他不允许作为标识符的初始字符的字符开头,则在组件前面加上下划线。
  •   

参考

答案 1 :(得分:211)

这三个都不是惯例。

使用com.stackoverflow.mypackage

包名称不遵循驼峰套管或下划线或连字符package naming convention

此外,Google Java Style Guide指定完全相同的(即com.stackoverflow.mypackage)约定:

  

5.2.1包名称

     

包名称全部小写,连续的单词简单连接在一起(没有下划线)。例如,com.example.deepspace com.example.deepSpacecom.example.deep_space

     

- Google Java Style Guide: 5.2 Rules by identifier type: 5.2.1 Package names

答案 2 :(得分:16)

官方命名约定并不严格,除了前缀(在您的示例中为com)之外,它们甚至不会“禁止”骆驼案例表示法。

但我个人会避免大写字母和连字符,偶数。我也会像Bragboy一样选择com.stackoverflow.mypackage

(连字符' - '在包名中不合法)

修改

有趣 - 语言规范也有关于命名约定的说法。

Chapter 7.7 Unique Package Names中,我们看到包含大写字母的包名称的示例(因此CamelCase符号可以正常),他们建议用下划线替换hyphonation(“mary-lou” - >“mary_lou” )和带有下划线的java关键字前缀(“com.example.enum” - >“com.example._enum”)

包名中的大写字母的更多示例可以在章节6.8.1 Package Names中找到。

答案 3 :(得分:10)

任何人都可以使用下划线 _ (可以)

没有人应该使用hypen - (其不良做法)

没有人应该在包名内使用大写字母(不良做法)

来源:Naming a Package(docs.oracle)

答案 4 :(得分:1)

下划线在包名中看起来很难看。值得一提的是,如果名称由三个或更多单词组成,我使用姓名缩写(例如:com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo),然后在package-info.java中记录包目的。

答案 5 :(得分:1)

包名称中的单词串联是大多数开发人员不能做到的。

你可以使用类似的东西。

com.stackoverflow.mypackage

参考JLS Name Declaration