Java 以开头的嵌套静态类名$

Java 以开头的嵌套静态类名$,java,Java,我见过一些代码库,其中人们编写了名称以“$”开头的嵌套静态类?这有什么意义 class A { int a; static class $B { int b; } } 没有意义$是java名称的有效字符;这没什么特别的 ,它定义了有效的类名字符(或多或少是大多数“非语法”字符,第一个字符不是数字),甚至还特别警告了这种情况: $符号只能在机械生成的源代码中使用,或者很少用于访问遗留系统上预先存在的名称 我也看到了 这只是一个局部命名约定,可能是为了提醒/向开发人员指

我见过一些代码库,其中人们编写了名称以“$”开头的嵌套静态类?这有什么意义

class A {
  int a;

  static class $B {
    int b;  
  }
} 

没有意义
$
是java名称的有效字符;这没什么特别的

,它定义了有效的类名字符(或多或少是大多数“非语法”字符,第一个字符不是数字),甚至还特别警告了这种情况:

$
符号只能在机械生成的源代码中使用,或者很少用于访问遗留系统上预先存在的名称

我也看到了

这只是一个局部命名约定,可能是为了提醒/向开发人员指出该类是一个内部类

尽管这是一种风格,但开发人员社区的普遍共识是不要将元数据编码到名称中。我看到的其他示例包括成员变量/参数的前导下划线,以及可怕的


试着给美好的事物起一个没有修饰的名字。

人们通常不会自己写;这些通常是在某个地方自动生成的。发件人:

“Java字母”包括大写和小写ASCII拉丁字母A-Z(\u0041-\u005a)和A-Z(\u0061-\u007a),出于历史原因,还包括ASCII下划线(\u005f)和美元符号($,或\u0024)。$sign应该只在机械生成的源代码中使用,或者很少用于访问遗留系统上预先存在的名称

美元符号是一个合法的字符,但它是一个非常强大的约定,与使用大写字母类名一样,而不是在普通代码中使用。

少数人用它来表示内部类,但我个人从来没有见过“不使用合成标记的任何代码”>代码< $/COD>字符,我认为它与java中的匈牙利符号相符合。

这有什么意义

class A {
  int a;

  static class $B {
    int b;  
  }
} 
您必须询问编写代码的人其意义是什么

但是,从Java语言的角度来看,这没有什么意义;i、 Java编译器对美元符号没有特殊意义。(这只是另一个法定标识符字符,尽管建议您不要使用;请参阅)

然而,我怀疑美元特征的原因是:

  • 代码在某个时候已经从字节码中反编译出来。我这样说是因为Java编译器使用
    A$B
    作为
    A
    中声明的嵌套类
    B
    的合成名称
  • 从那以后修改/维护它的人或者不知道或者不关心标准Java风格的约定
它也可以是(经过深思熟虑的)“地方公约”


无论哪种方式,大多数Java程序员都会发现这一点令人反感。不要复制它。

不。它不是自动生成的。然后制作一个真实的例子。相关的,可能是间接的重复:还有另一种可能的解释。代码作者沉迷于金钱。也许我们应该给这个大会起个名字。特朗普怎么样?:-)