在Java标识符中使用不常见的字符"$"和"_"

3
在Java标识符中使用这些不常见的字符是否有什么陷阱呢?根据Java语言规范,“Java字母”包括大写和小写ASCII拉丁字母A-Z(\u0041-\u005a)和a-z(\u0061-\u007a),以及由于历史原因,ASCII下划线(_或\u005f)和美元符号($或\u0024)。$字符应仅在机械生成的源代码中使用,或者在遗留系统上访问预先存在的名称时很少使用。
这是否意味着这些字符已经过时了?还是它们只是保留用于特殊用例。静态字段名经常使用下划线。
我正在尝试构建一个基于字段和方法名称的小型库。它将接收对象解析其字段名称并决定如何操作。我也可以利用注释。但是在序列化(JAXB等)方面存在困难。而且有时使用具有描述性的字段名(约定大于配置)更容易更快捷。因此,在这种情况下,这些很少使用的字符可能会有用。
更新
我故意没有提到Unicode字符。我认为在标识符名称中使用Unicode字符至少不合适。

3
有更多有效的字符。 - assylias
我认为除了第一个字符外,您也可以使用数字。 - Andrew Mao
1
你可以使用任何Unicode字母,那么à怎么样? - Joop Eggen
我已经更新了我的问题。当然,我们也可以使用数字。但是我认为在标识符名称中,数字并不那么罕见。 - Ondrej Bozek
1个回答

2

Underscore(下划线)是完全可以的。但我建议避免使用$符号。例如$name可能会与一些隐藏或生成的字段发生冲突。

如果你的库需要在用户类中标记特殊字段,那么使用下划线也许是可行的。但你可以想象两个库有相似的需求并且会产生冲突。


一些使用Java的公司使用下划线前缀来表示类全局字段。由于某种原因,这些公司对于使用“this”有所顾虑。 - Gilbert Le Blanc
1
@GilbertLeBlanc:他们可能是从C约定中借鉴了一些结构字段的“私有”标记,使用下划线来表示。(这实际上并不能阻止其他代码访问这些字段,但它清楚地表明它们不应该被访问。)在Java中,人们通常将所有字段设置为私有的,因此这种约定变得不那么有意义了。 - ruakh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接