【问题标题】:Java api - Class names starting with _ [underscore]Java api - 以 _ [下划线] 开头的类名
【发布时间】:2014-03-16 12:44:57
【问题描述】:

我很想知道这一点,因为它们是 Java api [J2SE] 的一部分。

一般来说,在变量名中使用“_”来表示它们是实例变量或用于其他一些特殊目的是一种惯例[但绝对取决于程序员的口味]。

但在 Java API [J2SE] 中列出了少数类,其名称以下划线(“_”)开头。

Oracle 真的对这个下划线有什么特殊含义/目的吗? [如果是,] 为什么这些类与同一 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

【问题讨论】:

  • 它们在 org.omg 包中(以及其他带有该前缀的包)。它们很可能是实现类,实际上并不是 Java API 的一部分。
  • “通常约定在变量名中使用“_”来表示它们是实例变量或用于其他特殊目的”:Java 中没有。由于成员变量的构造函数语法,在 C++ 中需要这种约定。 Java 中没有这样的要求,因此它很少使用,并且只有那些认为他们仍在使用 C++ 编程的人才能使用。您提到的类都是 OMG 在 1990 年代初期根据 CORBA IDL 施加的命名限制定义的,这又与 Java 无关。
  • @EJP:我看你和我一样,发表太多评论。通常情况下,您会给出一个完全有效的答案。
  • @Gimby 谢谢。它最初是一条评论,但后来变得像 Topsy。我现在已经把它作为答案发布了。

标签: java api classname


【解决方案1】:

通常在变量名称中使用“_”表示它们是实例变量或用于其他特殊目的的约定

Java 中没有。由于成员变量的构造函数语法,在 C++ 中需要这种约定。 Java 中没有这样的要求,因此它很少使用,而且只有那些似乎认为自己仍在使用 C++ 编程的人才会使用它。

您提到的类都是 OMG 在 1990 年代初期根据 CORBA IDL 施加的命名限制定义的,这又与 Java 无关。

【讨论】:

    【解决方案2】:

    这些类并不是真正的 Java 类,它们是 CORBA 实现的一部分,并且是从与编程语言无关的 IDL 定义生成的——命名约定是 CORBA 的。

    【讨论】:

    • 只是出于好奇,如何断定它们是 CORBA IDL 的一部分,在 JAVA API 中是否有任何指示[即这个类是CORBA IDL的实现]?
    • @VenkateshAchanta org.omg 包层次结构下的任何内容都与 CORBA 相关,并且将使用 CORBA 命名约定而不是通常的 Java 命名约定。
    【解决方案3】:

    没有什么特别的原因,再说一遍..这是一个品味问题。

    但是,如果您想完全遵循Java Naming Conventions,则应避免将_ 附加到类的名称中。

    _ 附加到类成员也是多余的,大多数IDE 用不同的颜色为这些字段着色,您可以轻松地将它们与局部变量区分开来。我觉得这段代码更优雅:

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

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

    但同样,它仍然是一个品味问题,可能是您的公司使用它,所以您不想成为第一个破坏它的人。

    【讨论】:

    • 我在 C# 中使用下划线前缀,因为 - 虽然有时不赞成 - 它确实起到了约定的作用,而且我在高质量的源代码中看到了它,例如在实体框架中。在Java中不是这样,因此我没有。在罗马做罗马人做的事。有趣的是,在 Android Studio 中,当您添加一个新活动时,为您生成的骨架代码使用 m 前缀作为类成员(mSectionsPagerAdapter 等),我一直认为这是一个禁忌,甚至比下划线还要糟糕。
    【解决方案4】:

    这是编写 java 代码时应遵循的命名约定表。

    你可以用'_'开始一个类名,但不建议这样做。

    【讨论】:

    • 这张表的一半只是重复了 Java 的规则,你不能打破这些规则。他们没有“应该”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2015-05-24
    相关资源
    最近更新 更多