2014-02-17 34 views
2

我很想知道這是他們的Java API [J2SE]的一部分。
的Java API - 類名稱以_ [下劃線]

一般來說,它是一個在變量名稱中使用「_」來表示它們是實例變量或用於其他特殊用途的約定(但顯然它取決於程序員的口味)。

但是有幾個類別在Java API [J2SE]中列出的,其名稱以下劃線(「_」)開頭。

甲骨文真的有這個下劃線什麼特殊的意義/目的是什麼? [如果是,]與同一API中的其他類相比,這些類有何不同?

http://docs.oracle.com/javase/7/docs/api/

_BindingIteratorImplBase
_BindingIteratorStub
_DynAnyFactoryStub
_DynAnyStub
_DynArrayStub
_DynEnumStub
_DynFixedStub
_DynSequenceStub
_DynStructStub
_DynUnionStub
_DynValueStub
_IDLTypeStub
_NamingContextExtStub
_NamingContextImplBase
_NamingContextStub
_PolicyStub
_Remote_Stub
_ServantActivatorStub
_ServantLocatorStub

+0

它們位於'org.omg'包(以及包含該前綴的其他包)中。它們很可能是實現類,它們實際上並不是Java API的一部分。 –

+5

「通常它是在變量名稱中使用」_「來表示它們是實例變量或用於其他特殊用途的約定」:不是Java。 C++中需要這種約定,因爲成員變量的構造函數語法。 Java中沒有這樣的要求,因此它很少被使用,只有那些認爲他們仍然用C++編程的人才會這樣。根據CORBA IDL強加的命名限制,你提到的類都是在20世紀90年代早期由OMG定義的,它與Java沒有任何關係。 – EJP

+0

@EJP:我看到你和我一樣,發表太多評論。通常你會給出一個完全有效的答案。 – Gimby

回答

5

這些類並沒有真正的Java類,它們是CORBA實現的一部分,從編程語言無關的IDL定義生成 - 命名約定是CORBA之一。

+0

出於好奇,如何得出結論,他們是CORBA IDL的一部分,在JAVA API中是否會有任何跡象表明[即這個類是CORBA IDL的實現]? –

+1

@VenkateshAchanta @ org.omg'包層次結構下的任何東西都與CORBA相關,並將使用CORBA命名約定而不是通常的Java命名約定。 –

2

沒有爲沒有特殊原因,再次..它是口味的問題。

但是,如果您想完全遵循Java Naming Conventions,則應避免將_附加到類的名稱。

這是多餘的附加_類成員爲好,大多數IDE顏色搭配不同顏色的這些領域,你可以很容易地從局部變量區分。我看到這一段代碼更優雅:

public MyConstructor(int field) { 
    this.field = field; 
} 

public MyConstructor(int field) { 
    _field = field; 
} 

但同樣,它仍然是一個品味的母校,它可能是你的公司與它,所以你不想成爲第一個打破它的人。

+1

我在C#中使用下劃線前綴,因爲 - 雖然偶爾皺起眉頭 - 它確實作爲一個約定,我已經看到它在高質量的源代碼,例如在實體框架。在Java中不是這樣,因此我不這樣做。在羅馬像羅馬人那樣做。有趣的是,在Android Studio中,當您添加一個新的活動時,爲您生成的框架代碼對類成員使用'm'前綴('mSectionsPagerAdapter'等),我一直認爲這是一個禁忌,甚至比下劃線更差。 –

7

一般來說,在變量使用「_」公約名稱,以表明他們是實例變量或其他一些特殊用途

沒有在Java中。C++中需要這種約定,因爲成員變量的構造函數語法。在Java中沒有這樣的要求,因此它很少被使用,只有那些似乎認爲他們仍然用C++編程的人才會這樣。

根據CORBA IDL強加的命名限制,你提到的類都是在20世紀90年代早期由OMG定義的,該命名限制又與Java無關。

0

Naming Conventions for Packages, Class and variables

這裏的命名,同時編寫Java代碼是一個應當遵循的表。

您可以用'_'開頭,但不推薦。

+0

這個表的一半是僅僅重複你*不能破壞的Java規則。對他們沒有'應該'。 – EJP