1

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

Java 教程是这样说的:

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

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

4

5 回答 5

3

我见过的唯一一次是

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

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

于 2010-01-01T00:54:43.087 回答
2

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

本教程建议不要在人工编写的代码中的标识符中使用“$”,这是针对每个人的。

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

" Java 字母包括大写和小写 ASCII 拉丁字母A-Z,以及a-z, 以及由于历史原因,ASCII 下划线 ( _) 和美元符号 ( $)。$字符应仅用于机械生成的源代码中,或者很少用于访问 pre-遗留系统上的现有名称 ” - JLS 3.8

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

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

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

于 2010-01-01T02:53:03.360 回答
0

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

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

仍然没有意义:(

于 2011-05-26T10:42:42.477 回答
0

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

看起来很奇怪。

于 2010-01-01T00:53:53.320 回答
0

或者内部类。

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

于 2010-01-01T00:58:38.570 回答