通用名称
泛型類(lèi)型參數(shù)名稱(chēng)通常包含一個(gè)大寫(xiě)字母字符。 如果您開(kāi)始閱讀有關(guān)泛型的官方ORACLE文檔,則第一個(gè)示例是
/*** Generic version of the Box class.* @param <T> the type of the value being boxed*/ public class Box<T> {// T stands for "Type"private T t;public void set(T t) { this.t = t; }public T get() { return t; } }通用類(lèi)型的名稱(chēng)為T(mén) 一個(gè)字母,意義不大,通常與其他標(biāo)識(shí)符命名樣式相對(duì)。 它僅廣泛用于泛型。 奇怪。 是什么原因呢?
到目前為止,我已經(jīng)聽(tīng)到了以下論點(diǎn):
- 一個(gè)類(lèi)或方法不需要很多類(lèi)型變量名,因此您不會(huì)用完ABC的字母。
- 基于這種推理,我們還應(yīng)該使用一個(gè)字符方法名稱(chēng)嗎?
- 因?yàn)橛蠮avaDoc,所以一個(gè)字符不會(huì)固有地解釋類(lèi)型不是問(wèn)題。 您可以解釋類(lèi)型名稱(chēng)的實(shí)際含義。
- 而且我們還應(yīng)該忘記我們所學(xué)到的有關(guān)干凈代碼和變量命名的所有內(nèi)容。
- 具有一個(gè)字符的類(lèi)型名稱(chēng)使它們與變量,方法和類(lèi)名稱(chēng)以及常量名稱(chēng)區(qū)分開(kāi)。
- 這是一個(gè)好點(diǎn)。
- 但是Google Code Style允許您使用多種字符類(lèi)型的名稱(chēng)。
- 哦是的
然后怎樣呢?
如果您不喜歡泛型的單個(gè)字符命名,則可以使用_或$前綴來(lái)命名它們。 這是您可以在stackoverflow上看到的建議。 至于我:這很奇怪。 使用$可以使我感到“歡欣”,溫暖的感覺(jué)使我想起了我在編寫(xiě)Perl時(shí)的青春。 我不再這樣做了,這是有充分理由的。 時(shí)代改變了,技術(shù)改變了,我改變了。
$通常由編譯器和某些代碼生成器用來(lái)命名生成的字段和方法。 在Java源代碼級(jí)別上使用$可能會(huì)導(dǎo)致某些命名沖突,導(dǎo)致編譯器難以找到合適的名稱(chēng),但是在這方面,當(dāng)前版本的Java編譯器相當(dāng)容易出錯(cuò)。 他們只是一直嘗試通過(guò)一些簡(jiǎn)單的算法來(lái)找到一個(gè)合適的名稱(chēng),直到找到一個(gè)不會(huì)與任何Java源代碼名稱(chēng)沖突的名稱(chēng)為止,因此這不會(huì)成為問(wèn)題。
下劃線(xiàn) :嗯,實(shí)際上是我們過(guò)去使用的東西,而不是空間。 在舊的矩陣打印機(jī)上,下劃線(xiàn)字符打印得很差,以至于您無(wú)法將其與空格區(qū)分開(kāi),因此使用多字變量名稱(chēng)是一個(gè)丑陋的竅門(mén)。 由于名稱(chēng)開(kāi)頭的下劃線(xiàn)是一個(gè)完全反模式的恕我直言,實(shí)際上是使用相同的名稱(chēng)來(lái)命名兩件事。 幾乎就像沒(méi)有下劃線(xiàn)字符一樣。
您也可以使用T_前綴,因?yàn)檫@是C ++和C#中的慣例(我不太熟悉T_前綴,對(duì)此我不確定)。 但這和沒(méi)有T一樣丑陋。
我的喜好是使用有意義的名稱(chēng),并在常量的情況下遵循相同的約定。 例如使用
public final class EventProducer<LISTENER extends IEventListener<EVENT>,EVENT> implements IEventProducer<LISTENER, EVENT> {代替
public final class EventProducer<L extends IEventListener<E>,E> implements IEventProducer<L,E> {即使那是我的個(gè)人,高級(jí),專(zhuān)業(yè),專(zhuān)家意見(jiàn),但我不使用它。 為什么? 因?yàn)槲以趫F(tuán)隊(duì)中的企業(yè)環(huán)境中工作。 使用比官方默認(rèn)設(shè)置更具可讀性的內(nèi)容所獲得的收益并不像辯論和分歧所造成的損害那樣高。 除此以外,新員工還必須適應(yīng)當(dāng)?shù)氐娘L(fēng)格,而且也要花錢(qián)。 使用可用但不是最佳的全局樣式比使用良好的局部樣式更好。 忍受它。
我們可以走向全球嗎?
你可以試試。 這是我最多能說(shuō)的。 如果最初的建議設(shè)定編碼標(biāo)準(zhǔn)比1960年代的樣式一字母法更好,那將是更好的選擇,但這已經(jīng)是歷史了。 損壞已經(jīng)完成。 而且,這與在OO中引入null的絕妙想法所造成的損害無(wú)可比擬。
只要Java仍然存在,我們將只使用一個(gè)字符的泛型。 而且由于我快50歲了,所以這段時(shí)期比我的壽命更長(zhǎng)。 請(qǐng)注意,COBOL仍然有效。 我們應(yīng)該對(duì)Java有所期待。
翻譯自: https://www.javacodegeeks.com/2015/05/generics-names.html
總結(jié)
- 上一篇: 使用Junit测试名称
- 下一篇: 不要被泛型和向后兼容性所愚弄。 使用泛型