Java命名约定(带缩写词)


218

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


93
我讨厌首字母缩写词。DigitalVersatileDiscPlayer是前进的道路。
Tom Hawtin-大头钉

7
+1给汤姆开玩笑。如果“正确”被重新解释为“标准”或“最典型”,我确实发现此问题很有帮助。接受的答案很棒!
乔恩·库姆斯

6
对我而言,将此类首字母缩写词视为一个单词是很有意义的,因此我遵循惯例并使用DvdPlayer
丹尼尔(Daniel)

7
样式指南对此有以下说法:“如果缩写是较长类名的一部分,则将缩写格式设置为单词。” DvdPlayer方法也是这样。(而且,对于汤姆,“使用完整的单词,避免使用缩写,除非缩写比长格式使用得更广泛。”,并且我认为“ DVD”比“数字多功能光盘”的使用更广泛:-)
aioobe

您当然是说“讨论”,不是吗?:)
Ville Oikarinen '19

Answers:


237

由于看起来答案是Java中没有针对此的单一标准,因此我想指出,.NET Framework设计指南确实指定了这一点。

现在,在抨击我成为话题之前,请记住Java和.NET Framework的类命名准则非常相似,这使.NET准则可用作说服力的参考。

一般规则

两种准则都建议仅在首字母缩写广为人知且易于理解时使用首字母缩写。DVD或XML就是很好的例子,因为您将立即识别出它们,但是识别扩展版本会花费一些时间。

缩略语

《 .NET Framework指南》建议不要使用缩写(与首字母缩写相反),除非标识符中可以使用两个常见的缩写“ ID”和“ OK”。使用缩写时,Id除camelCase标识符(与PascalCase标识符相反)的第一个单词外,始终使用混合大小写。

在Java中,仅在某些时间遵循此约定。看看 JCL中的拼写getID和混合情况如何getId。(滚动到该页面的中途)。但是,在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
好吧,努力!
Eliran Malka 2013年

1
我喜欢这样,除了使用3个字母和2个字母的首字母缩写词的CAPS不一致。(也许我是一名纯粹主义者,但出于实际原因看到了可接受的答案。此外,还有混乱的因素。)
Jon Coombs 2014年

1
@JCoombs:好吧,两个字母的不一致对IpAddress很多人来说看起来很糟糕。就我个人而言,当我需要编写Java代码时,我会使用混合大小写的3个字母的首字母缩写词,仅保留两个字母作为特例。
凯文·卡斯卡特

5
如果您的班级名称具有多个相邻的两个字母的首字母缩写词怎么办?无论您做什么,都会看起来“错了”-USGFCharset,USGfCharset,US_GFCharset ...
凯文

3
真的很好的答案。但是我个人不喜欢.NET指南的想法,即根据首字母缩写的长度以及是否是缩写来不同地命名。谁真正在乎并检查缩写的长度?还是缩写?我更喜欢总括规则。当您使用与您选择的规则不同的约定的第三方库时,就会出现问题。
Amani Kilumanga

98

没有“正确”的答案。只是一组可以更好地与其他工具配合使用的惯例和约定。

因此我更喜欢DvdPlayer。这是更有益,因为在Eclipse中,你可以做Ctrl+ Shift+ T和每个单词的第一个字母挑班。

替代文字


19
哦,这是一个有用的月食提示。谢谢!
PeterPerháč10年

1
(+1)小费。为我解答了问题:-)
Asaf 2010年

2
只需“ SIO”就足以找到该类。
finnw 2010年

7
这也可以在Eclipse的其他地方使用-例如自动完成。有一个名为“ myDvdCoverImage”的方法/变量吗?-只需键入mDCI Ctrl + Space
teabot

3
还设置了一些快捷方式,例如sysout Ctrl + Space,可为您提供System.out.println。(尝试)和(用于)同样如此
medopal'2

50

我已经看到它们都在野外使用,Sun似乎很喜欢这种DVDPlayer风格。DvdPlayer不过,我更喜欢,因为那样可以清楚地知道单词边界在哪里,即使有多个连续的首字母缩写词也是如此HTTPURLConnection


3
这样输入的速度也更快。
Ates Goral

6
我认为“ DVDPlayer”使单词边界更加清晰。“ DVD”不是一个词,而“ DVD”是“数字多功能光盘”的首字母缩写。因此,“ DVD Player”中的实际单词边界位于“ D”,“ V”,“ D”和“ P”。
格雷格·布朗

18
@GregBrown:DVD是带孔的光盘,除了您知道它的全名之外,没有人关心它。而且使用DvdPlayer更实用。
Igor Rodriguez 2014年

4
@GregBrown:实际上,至少在Eclipse(驼峰式识别是首字母缩写的痛苦)中,它更实用:即使用DvdPlayer,您可以键入“ DP”并按Ctrl + 1来选择DvdPlayer,但是如果如果您有DVDPlayer,则必须输入“ DVDP”。如果更长的话,还会更令人讨厌。我不想在我的代码中包含一个UNESCOConnector。无论如何,这是一个选择问题。
伊戈尔·罗德里格斯

21
另一个很好的例子是HTTPSID-我的意思是HTTP SID或HTTPS ID ...因此,应分别将其写为HttpSid或HttpsId以更好地解释其含义。
奥兹·埃德里

37

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

Catalogue catalogue;
Person person;

因此,如果使用DVDPlayer,我将如何称呼它的实例?dVDPlayer?因此,我将选择DvdPlayer类名,以便可以将实例命名为dvdPlayer


16
这有什么错DVDPlayer dvdPlayer;
azz 2014年

9
@DerFlatulator它没什么问题?不管您是怎么来的dvdPlayer,回去时都会得到DvdPlayer
maaartinus 2015年

5
@DerFlatulator:从UpperCamelCase转换为lowerCamelCase时,这是自动化的问题:在将Hibernate映射自动化到snake_case时,我遇到了问题:DvdPlayer -> dvd_player但是DVDPlayer -> d_v_d_player。无法自动将DVDPlayer转换为dvd_player。
pdem '16

3
@DerFlatulator:好的,感谢您的答复,在这种情况下它可以工作。但是我仍然对“ DvdPlayer”表示法深信不疑:DVDRPGPlayer呢?应该将其转换为dvdRpgPlayer,而不是dvdrpgPlayer。
pdem '16

2
还要考虑您的吸气剂和吸气剂: 例如,当与JSP EL(例如)一起使用时,其getDvdPlayer()效果要好于。而且,如果您要在缩写词中使用小写字母命名吸气剂,则最好保持类名相同,以保持一致性和可预测性。getDVDPlayer()foo.dvdPlayer
daiscog

33

JavaSE类,Apache Commons和Spring中的一些示例:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

所以-没关系。


3
同意 只要在您的代码库中保持一致即可。
JARC

2
我不会说这没关系,尽管这并不重要。一些使用发现普遍喜欢的标准非常有用,即使不是所有人都一致遵循这些标准。
乔恩·库姆斯

我应该优先SRSSoftwareRequirementSpecification
Shantaram Tupe


10

正如其他人指出的那样,它的风格在不同项目中有所不同。Guava和GWT等Google项目更喜欢这种DvdPlayer样式。

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


一个更普遍的谷歌约定链接DvdPlayer:风格google-styleguide.googlecode.com/svn/trunk/...
斯坦Kurdziel


8

sun java docs

类名应为名词,每个内部单词的首字母应大写。尝试使您的类名称保持简单和描述性。使用整个单词,避免使用首字母缩写词和缩写词(除非缩写词比长格式(如URL或HTML)使用得更广泛)。


14
关于它应该是大写字母还是骆驼字母,这并没有真正说出什么。
DD。

@DD。我觉得对我来说,“更广泛使用的”点使用比像DVD,MRI,马夹等一些随机的具体业务字全部大写的相关缩略词(HTTP,GET等)
goelakash

3

DVDPlayer是标准,但DvdPlayer并不少见。

您更多的时候看不到getId。这可能是由于认为ID是“ Identity”的缩写。它实际上是身份证明文件的缩写。

HttpURLConnection通常以混合约定为例。但是,URL中用作协议名称的“ http”应为小写(尽管通常接受大写)。


2
我认为这不是一个真正的标准,但它可能是最常见的。
b.roth 2010年

它在Sun Java编码标准IIRC中。虽然不在JLS中。
Tom Hawtin-大头钉

7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire 2010年

2
我敢肯定,大多数人都将ID用作Identifier的缩写。也就是说,在数据库中,表ID是指身份证明文件中的表标识符。
DD。

9
DVDPlayer绝对不是标准。甚至JDK在此方面也完全不一致。
凯文·布兰里恩

0

这里没有“正确”,只有首选项。

Sun在命名包含“ URL”和“ HTML”的类的方式上是一致的,但是在Javadocs中,我看到HTTP同时使用了所有大写字母和驼峰式大小写。

就个人而言,我更喜欢DvdPlayer。


我相信网址中的HTTP协议名称应使用小写字母(尽管浏览器可能会接受大写字母)。
Tom Hawtin-大头钉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.