带有缩略语的Java命名约定

DD.*_*DD. 209 java naming-conventions

以下Java类的正确名称是什么: DVDPlayerDvdPlayer

Kev*_*art 223

由于看起来答案是Java中没有单一的标准,我想要注意.NET Framework设计指南确实指明了这一点.

现在在关闭我的主题之前,请记住Java和.NET Framework的类命名准则非常相似,这使得.NET指南有用作为一个有说服力的参考.

通用规则

这两个指南建议仅在首字母缩略词广为人知且充分理解时才使用首字母缩略词.DVD或XML就是很好的例子,因为虽然您会立即识别它们,但识别扩展版本需要更长的时间.

缩略语

.NET Framework指南建议不要使用缩写(而不是缩略语),除了标识符中可以使用两个常用缩写"ID"和"OK".使用缩写时,Id除了camelCase标识符的第一个单词(与PascalCase标识符相对)外,始终使用混合大小写.

在Java中,仅在某些时候遵循此约定.看看如何混合的拼写getIDgetId都在JCL.(在该页面的中间向下滚动).但是在Java 8版本中,getId使用的越来越多,这暗示了PascalCase约定现在是首选.最好尽可能完全避免使用缩写.

简短的缩略词

.NET Framework指南说,像'IO'这样的两个字母的首字母缩略词对于这两个字母应该具有相同的大小写.因此,对于您可能获得的PascalCase标识符(如类名)DBRate,而对于camelCase标识符(如本地变量),您可能会获得ioChannel.

这似乎也是Java中的主流惯例.

长缩略语

.NET Framework指南建议缩写三个字母或更长的字母使用PascalCase和camelCase标识符的混合大小写,但camelCase标识符的第一个单词除外.因此,对于您可能具有的类名XmlDocument,可能会命名本地变量httpRequest.

Java中并不总是遵循此约定.四个字符的首字母缩略词似乎通常使用混合大小写,但即使是JCL也不一致三个字母的首字母缩略词.它们中的大多数似乎都是大写的,如"URL","XML","SQL"和"DOM",但也有一些例外,如'Jar'.

结论

对于Java:

对于4个以上的字母缩略词,请使用混合大小写.标准库就是这样做的,它只是很有意义.

对于3个字母的首字母缩略词,您可以像JCL一样使用全部大写,或者您可以使用类似.NET Framework的混合大小写.无论哪种方式,都要保持一致.

对于2个字母的首字母缩略词,请使用全部大写.

对于2个字母的缩写,Java并没有真正的标准,但我建议使用混合大小写,除非与其他名称的一致性会使所有大写看起来更好.

  • 好吧,努力! (11认同)
  • 如果您的班级名称有多个相邻的双字母缩略词怎么办?无论你做什么,都会看起来'错了' - USGFCharset,UsGfCharset,US_GFCharset ...... (5认同)
  • 真的很好的答案.但就我个人而言,我不喜欢.NET指南根据首字母缩略词的长度以及它是否是缩写来区别命名的想法.谁真正关心并检查首字母缩略词的长度?或者如果它是缩写?我更喜欢命名的一揽子规则.当您使用与您选择的规则不同的约定使用第三方库时,问题就出现了. (3认同)

fly*_*ire 97

没有"正确"的答案.只是一组更好地与您的其他工具一起使用的实践和约定.

所以我更喜欢DvdPlayer.它更有用,因为在Eclipse中你可以做Ctrl+ Shift+ T并按每个单词的第一个字母选择类.

替代文字

  • oooo这是一个有用的日食提示.谢谢! (18认同)
  • 这也适用于Eclipse中的其他地方 - 例如自动完成.有一个名为'myDvdCoverImage'的方法/变量? - 只需输入mDCI Ctrl + Space即可 (7认同)
  • 还有一些已设置的快捷方式,如sysout Ctrl + Space,为您提供System.out.println.同样适用于(尝试)和(用于) (3认同)
  • (+1)一个很好的提示。这为我回答了这个问题:-) (2认同)
  • 只需"SIO"即可找到该课程. (2认同)

Jaa*_*koK 50

我已经看到他们两个都在野外使用,而Sun似乎也喜欢这种DVDPlayer风格.DvdPlayer不过,我更喜欢这样,因为即使有多个连续的首字母缩略词,也很清楚字边界在哪里,如HTTPURLConnection.

  • 另一个很好的例子是HTTPSID - 我的意思是HTTP SID或HTTPS ID ...因此它应分别编写HttpSid或HttpsId以更好地解释其含义. (20认同)
  • @GregBrown:DVD是一个有洞的光盘,没有人除了你知道它的全名,都不关心它.使用DvdPlayer更加实用. (16认同)
  • 我认为"DVDPlayer"使单词边界更清晰."DVD"不是单词,而"DVD"是单词"Digital Versatile Disc"的首字母缩写.因此"DVD播放器"中的实际字边界为"D","V","D"和"P". (6认同)
  • @GregBrown:事实上它至少在Eclipse中更实用,其中驼峰式识别是一个痛苦的缩写:即使用DvdPlayer你可以输入"DP"并按Ctrl + 1来选择选择DvdPlayer,但是如果你有DVDPlayer你必须输入"DVDP".如果它更长,那就更烦人了.我不想在我的代码中有一个UNESCOConnector.无论如何,这是一个选择问题. (4认同)
  • 以这种方式输入也更快. (2认同)

Pet*_*háč 37

我喜欢以下列方式定义类的各个实例:

Catalogue catalogue;
Person person;
Run Code Online (Sandbox Code Playgroud)

因此,如果我使用DVDPlayer,我会将其称为什么实例?dVDPlayer?因此,我会选择DvdPlayer类名,因此您可以将实例命名为dvdPlayer.

  • `DVDPlayer dvdPlayer有什么问题;`? (16认同)
  • @DerFlatulator它有什么问题?无论你怎么来到'dvdPlayer`,当你回去时,你都会得到'DvdPlayer`. (9认同)
  • @DerFlatulator:当从UpperCamelCase转换为lowerCamelCase时,这是一个自动化的问题:我在将Hibernate映射自动化为snake_case时遇到了问题:`DvdPlayer - > dvd_player`但是`DVDPlayer - > d_v_d_player`.没有办法将DVDPlayer自动化到dvd_player. (5认同)
  • @DerFlatulator:好的,谢谢你的回复,它适用于这种情况.但我仍然坚信"DvdPlayer"符号:DVDRPGPlayer怎么样?它应该转换为dvdRpgPlayer,而不是dvdrpgPlayer. (3认同)
  • 还要考虑你的getter和setter:`getDvdPlayer()`比`getDVDPlayer()`更好,例如,当与JSP EL一起使用时(例如,`foo.dvdPlayer`).如果你在缩写词中用小写字母命名你的getter,那么为了保持一致性和可预测性,最好保持你的类名相同. (2认同)

Boz*_*zho 32

JavaSE类,apache commons和spring的一些例子:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

所以 - 这并不重要.

  • 同意.只需在代码库中保持一致即可. (3认同)
  • 我不会说这没关系,虽然这不是一个大问题.一些使用找到一般首选标准非常有用,即使不是其他所有人都遵循它们一致. (2认同)

Bri*_*ris 23

有效的Java似乎更喜欢DvdPlayer.


cod*_*ict 8

来自sun java docs:

类名应该是名词,大小写混合,每个内部单词的首字母大写.尽量保持您的类名简单和描述性.使用整个单词 - 避免缩略语和缩写(除非缩写比长格式更广泛使用,例如URL或HTML).

  • 这并没有真正说明它应该是上层还是驼峰. (14认同)

Ste*_*tez 8

正如其他人所指出的那样,它的风格因项目而异.像Guava和GWT这样的Google项目更喜欢这种DvdPlayer风格.

https://google.github.io/styleguide/javaguide.html#s5.3-camel-case