使用单个美元符号`$`作为java类名称的任何风险?

Gel*_*Luo 16 java javac java-8

最初我使用下划线_作为类名.新的Java8编译器抱怨它" 在Java SE 8之后可能不受支持 ".我改变了$,并且没有任何警告.但是我记得$Java用它来表示字节代码中的内部/嵌入类.我想知道使用美元符号$作为班级名称是否存在任何风险

这个问题的一些背景知识.我想要做的是克服Java不支持纯函数的事实,而_或$是用命名空间来封装一些非常通用的概念(类/静态方法).我也没有一个好名字,也不希望lib用户输入太多东西来引用该命名空间.以下代码显示了我正在做的事情:https://github.com/greenlaw110/java-tool/blob/master/src/main/java/org/osgl/_.java

Ste*_*n C 22

这是一种糟糕的风格,并且$在Java中的任何标识符中使用都有潜在的风险.它存在风险的原因是该$字符是为使用Java工具链和第三方语言工具而保留的.

  • Java编译器在内部和嵌套类的"内部"类名中使用它.
  • 它由Java编译器以合成属性的名称使用.
  • 它可以由第三方代码生成器(例如注释处理器)用于各种目的.
  • 它可以被其他针对JVM平台的语言使用,并且可能需要与您的代码共存.

您目前可能不会遇到普通$类名的技术问题(至少在标准Java工具链方面).但总有可能在未来发生变化:

  • 他们(有效地)保留了改变这一点的权利1.
  • 在这个_例子中有一个先例可以做到这一点.

如果你真的需要一个字符类名,这将是更好的发挥它的安全和使用F或者Z还是其他什么东西是不保留.

但说实话,我认为你最好尝试实现(或者只是使用)一种真正的功能语言,而不是试图将功能性编程"系统"用于Java.或者,也许只是在官方发布之前切换到Java 8."我会拒绝阅读/维护一个看起来像jquery的Java代码库.


我不是要为Java创建一个函数库,只是想创建一个lib来维护我使用的一些常用工具.再一次,我是极简主义的倡导者,并对像apache commons这样的东西感到厌倦.添加功能的东西,以帮助我更容易操作集合.

如果是您的代码,您可以做自己喜欢的事情.做出自己的决定.根据你的意见行事.成为"冒险者"...... :-).(我们的建议$,等等......是没有意义的.)

但是,如果您是为客户或雇主编写此代码,或者打算创建(可行的)开源产品,那么您需要考虑其他人的意见.例如,如果您在其他地方找到更好的工作,您的老板需要对您的代码的可维护性有一个明智的意见.一般来说,下一个人是否能够弄明白,保留你的代码,新鲜等等......还是会被托付给垃圾箱?


1 - JLS§3.8声明"该$字符只能用于机械生成的源代码".这就是说"使用它会带来危险".假设构建自己的源代码生成器的人可以在标准工具链使用裸露的情况下更改它们$...但是更改大量手写代码更加困难,这将成为升级的障碍.