2014-02-17 112 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