我见过一些代码库,人们编写了嵌套的静态类,名称以" $"开头。 ?这有什么意义?
class A {
int a;
static class $B {
int b;
}
}
答案 0 :(得分:6)
没有意义。 $
是java名称的有效字符;它没什么特别的。
JLS Chapter 3.8,它定义了有效的类名字符(或多或少大多数"非语法"字符,第一个字符不是数字)甚至特别警告这种情况:
$
符号只能用于机械生成的源代码,或者很少用于访问旧系统上预先存在的名称
这只是一个本地命名约定,可能是为了提醒/指示开发人员该类是内部类。
虽然它是一种风格,AFAICT开发社区的普遍共识是不将元数据编码为名称。我见过的其他例子是成员变量/参数的下划线,以及糟糕的Hungarian notation。
尝试提供好的未修饰的名称。
答案 1 :(得分:2)
人们通常不会自己写作;那些通常是在某处自动生成的。来自JLS 3.8:
" Java字母"包括大写和小写ASCII拉丁字母AZ(\ u0041- \ u005a)和az(\ u0061- \ u007a),以及由于历史原因,ASCII下划线(_,或\ u005f)和美元符号($,或\ u0024)。 $符号应仅用于机械生成的源代码,或者很少用于访问旧系统上的预先存在的名称。
美元符号是一个合法的字符,但它是一个非常强的约定,与使用大写字母的类名称相同,而不是在普通代码中使用它。
少数人用它来表示一个内部类,但我个人从未见过用于任何不带合成标志的$
字符,而我会认为它与使用Java中的匈牙利符号相提并论。
答案 2 :(得分:2)
那有什么意义?
你必须要求编写代码的人具有重要意义。
然而,从Java语言的角度来看,没有任何意义;即Java编译器对美元符号没有特殊含义。 (它只是另一个合法的标识符字符,虽然您推荐不使用它;请参阅JLS 3.8)。
但是,我怀疑美元字符的原因是:
A$B
作为B
中声明的嵌套类A
的合成名称。它也可能是(故意)"地方会议"。
无论哪种方式,大多数Java程序员都会觉得这很令人反感。不要复制它。