我应该何时在变量名中使用美元符号($)?

Zig*_*gnd 14 java naming-conventions

美元符号($)是命名变量的有效字符,例如String superSecretFormula$;,但是当我们谈论命名约定时,我应该何时使用此符号?

例如,下划线最常用于分隔单词,因为不允许使用空格.

McD*_*ell 22

来自标识符Java语言规范:

$字符应仅用于机械生成的源代码,或者很少用于访问遗留系统上的预先存在的名称.

  • 首先,在 Java 中,“$”是变量名的有效符号,您可以将其用于任何您喜欢的用途:使您的代码 cla$$ier,表示变量在代码约定下是私有的,等等。其次,“$”用作 Java 编译器的分隔符,以指定何时在另一个类下声明一个类。https://www.quora.com/What-does-mean-in-Java-3 (2认同)

Ric*_*ett 15

您的问题标记为Java,但看起来您在询问类型字符,这些字符在Visual Basic中仍然受支持,但近来并未广泛使用(也很长时间).

这有点主观,但我认为可以说:永远不会

可能希望为变量名称添加前缀的一种情况$是编写JavaScript代码以区分jQuery对象.

编辑

关于使用a启动变量名$,Oracle Java教程告诉我们:

变量的名称可以是任何合法标识符 - Unicode字母和数字的无限长度序列,以字母,美元符号" $"或下划线字符" _" 开头.但是,惯例是始终用字母开头,而不是" $"或" _".

  • "这有点主观,但我认为可以说:永远不会" - 实际上,Oracle java教程明确指出你不应该使用它. (3认同)

Hui*_*eng 11

从理论上讲,您可以在变量名中使用美元符号,但强烈建议不要这样做,因为该符号在编译器内部使用(例如内部或匿名类的名称).

请参考stackoverflow上的两个相关问题:变量名中$的含义是什么?含有美元符号的Java类名无法对其进行编译,如果一个内部类存在


Cir*_*四事件 5

名称与合成字段冲突

McDowell引用了 JLS,这是一个由于名称与合成字段冲突而无法在 Oracle JDK 1.8.0_45 上编译的示例:

public class Assert {
    static final boolean $assertionsDisabled = false;
    public static void main(String[] args) {
        assert System.currentTimeMillis() == 0L;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是javac生成了一个$assertionsDisabled要实现的字段assert,它与我们的字段冲突,并javac说:

the symbol $assertionsDisabled conflicts with a compile synthesized symbol
Run Code Online (Sandbox Code Playgroud)

另请参阅:Java assert 关键字的作用是什么,何时应该使用?