Java包名中字分隔符的约定是什么?

在包名中如何区分单词?下列哪个选项是正确的?

  1. com.stackoverflow.my_package (Snake Case使用下划线)
  2. com.stackoverflow.my-package(使用连字符的Kebab Case)
  3. com.stackoverflow.myPackage (Camel Case)
  4. com.stackoverflow.MyPackage (Pascal Case)

一般标准是什么?

210743 次浏览

这三个都不是惯例。

使用com.stackoverflow.mypackage

包名不跟在驼峰大小写、下划线或连字符包命名约定后面。

另外,谷歌Java风格指南指定了完全相同的(即com.stackoverflow.mypackage)约定:

5.2.1包名

包名都是小写的,连续的单词简单地连接在一起(没有下划线)。例如,com.example.deepspacecom.example.deepSpacecom.example.deep_space

——谷歌Java风格指南:5.2按标识符类型划分规则:5.2.1包名

官方的命名约定并没有那么严格,除了前缀(在你的例子中是com)之外,他们甚至没有“禁止”驼峰大小写符号。

但我个人会避免大写字母和断字,偶数。我也会像Bragboy建议的那样选择com.stackoverflow.mypackage

(连字符“-”在包名中是不合法的)

编辑

有趣的是,语言规范也提到了命名约定。

第7.7章包的唯一名称中,我们看到包名由大写字母组成的例子(因此CamelCase表示法是可以的),他们建议用下划线替换连字符("mary-lou" -> "mary_lou"),并使用下划线作为java关键字的前缀("com.example. ")。Enum " -> "com.example._enum")

更多关于包名中大写字母的例子可以在6.8.1包名章中找到。

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

唯一包名的前缀总是用全小写的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

以下节选也是相关的:

在某些情况下,internet域名可能不是有效的包名。以下是处理这些情况的一些建议约定:

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

参考文献

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

任何人都不应该使用连字符-(这是坏习惯)

不应在包名中使用大写字母(不良做法)

注意:这里的“坏习惯”在技术上是指你可以使用它,但从传统上讲,写它是不礼貌的。

来源:命名包(docs.oracle)

 ></a></p></div>
                                                                            </div>
                                </div>
                            </div>
                        </div>
                                                <div class=

包名中的下划线看起来很难看。值得注意的是,对于由三个或三个以上单词组成的名称,我使用首字母缩写(例如:com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo),然后在package-info.java中记录包的用途。

在包名中串联单词是大多数开发人员不会做的事情。

你可以用。

com.stackoverflow.mypackage

参考JLS名称声明