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

Jig*_*gar 336 java naming-conventions package

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

  1. com.stackoverflow.my_package (下划线)
  2. com.stackoverflow.my-package (连字符)
  3. com.stackoverflow.MyPackage (骆驼香烟盒)

什么是通用标准?

bra*_*boy 236

这三个都不是惯例.

使用com.stackoverflow.mypackage.

包名称不遵循驼峰套管或下划线或连字符包命名约定.

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

5.2.1包名称

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

- Google Java样式指南:5.2按标识符类型的规则:5.2.1包名称.

  • 我部分同意 - 根据java命名约定,它们并非"错误",但在我看来不应该使用它们.(http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html) (8认同)
  • Java 包命名约定页面建议使用下划线,链接在答案中。例如:“org.example.hyphenated_name” (8认同)
  • @Haomin:原因是包使用底层文件系统,可能区分大小写或不区分大小写。在多开发人员、多平台项目的情况下,可能会导致文件夹名称出现问题。 (5认同)
  • 我一直遵循这个惯例。不过,可读性确实不太好。所有小写​​背后的原因是什么? (4认同)

pol*_*nts 229

以下是官方命名约定文档规定的内容:

独特的包名的前缀总是全部小写的ASCII字母,应该是顶级域名之一,目前com,edu,gov,mil,net,org,或符合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

以下摘录也是相关的:

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

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

参考

  • 第7.7章甚至建议在包名中使用下划线! (38认同)
  • 第7.7章不建议使用下划线,它建议用下划线替换特殊/无效符号,这与仅推荐一般用法相差甚远. (23认同)
  • 这里:http://www.oracle.com/technetwork/java/codeconventions-135099.html它说全部更低,但这里http://docs.oracle.com/javase/specs/jls/se7/html/jls -6.html#jls-6.1它表示第一个组件应该是小写的,它们也删除了大写单词分隔的例子.还在这里:http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html它说全是小写.因此,目前似乎不鼓励包名称中的大写. (6认同)
  • 更新参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1 http://docs.oracle.com/javase/specs/jls/se7/ html/jls-7.html#jls-7.1(没有6.8.1和7.7了) (2认同)

And*_*s_D 17

官方命名约定并不严格,除了前缀(com在您的示例中)之外,它们甚至不会"禁止"使用驼峰式表示法.

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

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

编辑

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

第7.7章唯一包名称中,我们看到包含大写字母的包名称的示例(因此CamelCase表示法可以正常),他们建议用下划线("mary-lou" - >"mary_lou")和前缀java替换hyphonation带下划线的关键字("com.example.enum" - >"com.example._enum")

有关包名称中大写字母的更多示例,请参见章节6.8.1包名称.

  • 正如安德烈亚斯所指出的那样,在包名中使用上套管没有*规则*.避免它的一个具体原因是我在进行跨平台开发时看到人们遇到混合案例包名称的问题.特别是当有人决定重命名或更改包的大小写时,您依赖于您的VCS和开发环境来完成*与目录大小写完全正确的事情. (2认同)
  • 实际上,有一些规则:"唯一包名的前缀总是用全小写ASCII字母书写"(http://www.oracle.com/technetwork/java/codeconventions-135099.html) (2认同)

Him*_*ori 16

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

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

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

来源:命名一个包(docs.oracle)

  • 是的,使用连字符是不好的做法,因为它是一个错误.编写不编译的代码确实是不好的做法. (41认同)

jpa*_*rca 6

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

  • 仅通过查看包名称,这可能不可读且难以理解包的内容 (4认同)
  • 很公平。这就是为什么我建议使用文档。我会随时使用这种方法,而不是将完整的单词串联起来(apiratesheet - 是“API Rate Sheet”还是“A Pirate Sheet”?) (2认同)