【问题标题】:Is there a convention, when using Java RMI, to use the dollar sign $ in a variable name?在使用 Java RMI 时,是否有约定在变量名中使用美元符号 $?
【发布时间】:2010-01-01 00:49:12
【问题描述】:

我意识到它是变量名的有效部分,但我从未见过变量名实际上使用符号 $。

Java 教程是这样说的:

此外,按照惯例,从不使用美元符号字符。您可能会发现在某些情况下自动生成的名称会包含美元符号,但您的变量名称应始终避免使用它。

但是,由于这是面向 Java 初学者的,我想知道在分布式世界中,$ 是否具有特殊含义。

【问题讨论】:

  • 如果你问我,我猜$ 在类文件中有效,但在 java 源代码中无效。

标签: java conventions variable-names


【解决方案1】:

这是我见过的唯一一次

  • 在生成的代理类中,经常在其方法、变量和类名中使用$
  • inner->外部类合成访问器方法,我认为在方法名称中也使用了$
  • 内部类名(如 JVM 所见)

不过,我从未见过它在源代码中使用过,而且我想不出有什么理由这样做。 $ 几乎是生成代码的明确指标。

【讨论】:

  • 我必须检查它在哪个班级。这是在学校作业中,在变量名中使用 $ 让我措手不及——我什至忘记了它是有效的。如果是代理类,我可以假设它们可能是生成的。
【解决方案2】:

但是,由于这是面向 Java 初学者的,我想知道在分布式世界中,$ 是否具有特殊含义。

本教程建议不要在人工编写代码的标识符中使用“$”。

确实,JLS 说的大致相同,而且该文档绝对不是针对初学者的:

"Java 字母包括大写和小写的 ASCII 拉丁字母 A-Za-z,以及出于历史原因的 ASCII 下划线 (_) 和美元符号 ($)。$ 字符应仅用于机械生成的源代码中,或者很少用于访问旧系统上预先存在的名称。" - JLS 3.8

'$' 标识符合法但不鼓励的原因是为编译器和代码生成器提供了对正常标识符命名空间的“私有”扩展。当生成器需要合成一个标识符时,在标识符中包含一个“$”意味着它不应该与任何现有(或未来)的人为创建的标识符发生冲突。

如果 '$' 不可用,生成器需要检查每个合成标识符是否不会产生标识符冲突,否则可能会生成无法编译的 Java 代码。如果生成的代码包含程序员提供的 Java 代码,这很困难,如果生成的代码需要与生成器在运行时不可用的任意类一起工作,这可能是不可能的。

我不知道生成器实际使用 '$' 的程度,但我知道 Java 编译器将它们用于嵌套和匿名内部类的名称,以及(我认为)相关的隐藏变量.所以你应该注意这个建议。

【讨论】:

    【解决方案3】:

    我只看到它被故意使用过一次,那是为了BigInteger $33 = BigInteger.valueOf(33L);

    看起来很奇怪。

    【讨论】:

    • 看起来确实很奇怪。显然,一些代码生成器也使用它。但我想知道这是否是 RMI 的某种约定,可能是从另一种语言引入的。
    【解决方案4】:

    或者一个内部类。

    不,我不会在变量名中使用它。 RMI 也没有什么特别之处可以保证这样的选择。

    【讨论】:

      【解决方案5】:

      如果您想看到真实的(可能)人工编写的代码广泛使用“$”来命名变量,您可以查看PacketWorld(多智能体系统的模拟工具)。

      我刚开始使用它,并在谷歌搜索“为什么在 java 中使用美元?”后被发送到这里。

      仍然没有意义:(

      【讨论】:

      • 你能说什么?总有某人认为规则不适用于他。叹息。
      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 2011-11-10
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多