在使用Java RMI时,是否存在在变量名中使用美元符号$的约定?

时间:2010-01-01 00:49:12

标签: java conventions variable-names

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

Java教程说:

  

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

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

5 个答案:

答案 0 :(得分:3)

我唯一见过的就是

    生成的代理类中的
  • ,它们的方法,变量和类名经常使用$
  • inner->外类合成访问器方法,我认为在方法名称中也使用$
  • 内部类名称(由JVM看到)

我从来没有在源代码中看到它,我想不出有任何理由这样做。 $几乎是生成代码的明确指标。

答案 1 :(得分:2)

  

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

教程建议不要在人工编写的代码中使用'$'标识符给每个人。

事实上,JLS大致相同,并且该文件最明确地不针对初学者:

  

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

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

如果“$”不可用,则生成器需要检查每个合成标识符是否不会创建标识符冲突,否则可能会生成无法编译的Java代码。如果生成的代码包含程序员提供的Java代码,则很难实现,如果生成的代码需要使用运行时生成器不可用的任意类,则可能无法实现。

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

答案 2 :(得分:0)

我只是故意使用过它,那是BigInteger $33 = BigInteger.valueOf(33L);

之类的东西

看起来很奇怪。

答案 3 :(得分:0)

或内心阶层。

不,我不会在变量名中使用它。 RMI没有什么特别值得保证这样的选择。

答案 4 :(得分:0)

如果你想看到现实(可能)人工编写的代码,大量使用'$'来表示变量命名,你可以查看PacketWorld(多代理系统的仿真工具)

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

仍然没有意义:(