开头我已经看到一些代码库,其中有人写过名称以“$”开头的嵌套静态类?那有什么意义呢?
class A {
int a;
static class $B {
int b;
}
}
开头我已经看到一些代码库,其中有人写过名称以“$”开头的嵌套静态类?那有什么意义呢?
class A {
int a;
static class $B {
int b;
}
}
没有意义。 $
是一个java名称的有效字符;没有什么特别的。
JLS Chapter 3.8,它定义有效的类名称的字符(更多或更少的最“非语法”字,第一个字符不是一个数字)甚至专门提醒注意这个特别的情况:
的
$
标志应该是仅用于机械生成的源代码,或者很少用于访问遗留系统上预先存在的名称。
也请参阅JLS Chapter 6: Names。
这只是一个本地命名约定,可能是提醒/向开发人员指出该类是内部类。
虽然这是一种风格的东西,但AFAICT开发者社区的普遍共识是而不是将元数据编码成名称。我看到的其他例子是成员变量/参数的前导下划线,以及可怕的Hungarian notation。
尽量让事情好undecorated名称。
人们一般都没有自己写过;这些通常是自动生成的。从JLS 3.8:
通过 “Java字母” 包括大写和小写ASCII拉丁字母AZ(\ u0041- \ u005a)和AZ(\ u0061- \ u007a),并且,由于历史原因,ASCII下划线( _或\ u005f)和美元符号($或\ u0024)。 $符号只能用于机械生成的源代码,或者很少用于访问原有系统上预先存在的名称。
的美元符号是一个合法的字符,但它是一个非常强公约看齐,与使用大写字母作为类名,不能在普通的代码中使用它。
极少数人用它来表示一个内部类,但我个人从来没有一次看到用于任何的$
字符也没携带合成标志,我会用匈牙利语考虑看齐Java中的符号。
那是什么意思?
你将不得不问问编写代码的人员的重要性。
然而,从Java语言的角度来看没有意义;即Java编译器对美元符号没有特别的含义。 (这只是另一个合法标识符字符,尽管一个推荐不能使用;请参阅JLS 3.8)。
不过,我嫌疑认为,美元字符是否是原因:
A$B
作为在A
中声明的嵌套类B
的合成名称。它也可能是(故意的)“本地公约”。
无论哪种方式,大多数Java程序员会发现这令人反感。不要复制它。
不是自动生成的。 – nibin012
然后生成一个真实的例子。 – chrylis
相关,可能是间接重复:http://stackoverflow.com/questions/19529603/any-risk-using-a-single-dollar-sign-as-a-java-class-name –