【问题标题】:When should I use the dollar symbol ($) in a variable name?什么时候应该在变量名中使用美元符号 ($)?
【发布时间】:2012-12-27 15:17:56
【问题描述】:

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

例如下划线主要用于分隔单词,因为不能使用空格。

【问题讨论】:

标签: java naming-conventions


【解决方案1】:

来自Java Language Specification on identifiers

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

【讨论】:

  • 首先,在 Java 中,'$' 是变量名的有效符号,您可以随意使用它:使您的代码更符合 $$ier,表示在代码约定下变量是私有的等。其次,'$' 用作 Java 编译器的分隔符,以指定何时在另一个类下声明一个类。 quora.com/What-does-mean-in-Java-3
【解决方案2】:

您的问题被标记为 Java,但您似乎在询问 type characters,Visual Basic 仍然支持它,但这些天(也不是很长时间)没有广泛使用。

这有点主观,但我认为公平地说:从不

可能希望在变量名称前加上$ 的一种情况是在将JavaScript 代码写入distinguish jQuery objects 时。

编辑

关于以$ 开头的变量名,Oracle Java tutorials 告诉我们:

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

【讨论】:

  • “这有点主观,但我认为公平地说:从不” - 实际上,Oracle java 教程明确指出您不应该使用它。
  • 我很难理解这个回复的第一部分与这个问题有什么关系
【解决方案3】:

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

请参考stackoverflow上的两个相关问题:What is the meaning of $ in a variable name?Java class name containing dollar sign fails to compile if an inner class is present

【讨论】:

    【解决方案4】:

    名称与合成字段冲突

    McDowell quoted the 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;
        }
    }
    

    问题是javac生成了一个字段$assertionsDisabled来实现assert,这和我们的字段冲突,而javac说:

    the symbol $assertionsDisabled conflicts with a compile synthesized symbol
    

    另见:What does the Java assert keyword do, and when should it be used?

    【讨论】:

      【解决方案5】:

      我同意,一般来说,应避免使用特殊符号 $,as explained by Richard。但是,我记得在reactor project 中看到使用 $ 来定义类似 jQuery 的选择器。我认为,谨慎使用 $ 符号有助于在 Java 中定义一些漂亮的 API。

      【讨论】:

        【解决方案6】:

        在 Java 中,我使用“_”作为私有类范围的非静态变量或字段的前缀,并使用“$”作为私有类范围的静态变量的前缀。

        它比使用“m”前缀更好,因为它不会阻塞阅读行。当你开始阅读变量词时,你显然不会开始阅读“_”或“$”,对吧?类似于 _addressMap$addressMap 但在地图中带有 m 类似 mAddressMap 在您开始阅读时可能会感到困惑。

        虽然它不是传统的 Java 代码,但它对标记这些变量有很大帮助,这样您就可以迅速理解它们是否是类范围的,或者是静态的还是非静态的。当然,你必须与你的队友直接讨论这个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 2013-08-26
          • 2012-01-26
          • 2012-06-10
          • 2011-05-01
          • 2011-11-10
          相关资源
          最近更新 更多