最初,我使用下划线_
作为类名。新的Java8编译器抱怨它“ 在Java SE 8之后可能不受支持
”。我将其更改为$
,不再有警告。但是我记得$
Java使用它在字节码中指示一个内部/嵌入式类。我想知道使用美元符号$
作为类名是否有任何风险
这个问题的一些背景。我想做的是克服Java不支持纯函数的事实,而_或$是放置一个命名空间来封装一些非常通用的概念(类/静态方法)。我对此也没有好名,也不想让lib用户键入太多东西来引用该命名空间。这是显示我正在执行的操作的代码:https :
//github.com/greenlaw110/java-
tool/blob/master/src/main/java/org/osgl/_.java
这是不好的样式,$
在Java中的任何标识符中使用都有潜在的风险。冒险的原因是该$
字符保留供Java工具链和第三方语言工具使用。
目前,您可能没有普通$
类名的技术问题(至少在标准Java工具链方面)。但是总有可能在将来改变这种情况:
_
示例中有这样做的先例。如果确实需要一个字符的类名,最好安全地使用它或使用F
或Z
保留一些其他名称。
但老实说,我认为您最好尝试实现(或仅使用)一种真正的功能语言,而不是尝试将功能编程“系统”引入Java。或者,也许可以在正式发布之前切换到Java
8。Cos I 拒绝 阅读/维护看起来像jquery的Java代码库。
我并不是要为Java创建功能库,而只是想创建一个库来维护我使用的一些通用实用程序。同样,我是极简主义者的拥护者,并且对apache
commons之类的东西感到厌倦。添加了功能性内容以帮助我更轻松地操作集合。
如果这是您的代码,则可以执行所需的操作。自己做决定。根据您的意见采取行动。成为“冒险者” … :-)。(我们对$
等的建议尚无定论。)
但是,如果您正在为客户或雇主编写此代码,或者打算创建(可行的)开源产品,那么您需要考虑其他人的意见。例如,如果您在其他地方找到一份薪水更高的工作,您的老板需要就代码的可维护性有一个知情的意见。通常,下一个家伙将能够弄清楚它,保留您的代码,更新等…还是将其委托给垃圾箱?
1-
JLS§3.8指出“
$
字符只能在机械生成的源代码中使用”。那就是说“使用它的后果自负”。假设是,如果标准工具链只使用裸机,则构建自己的源代码生成器的人可以 更改
它们$
,但是更改许多手写代码比较困难,这将是升级的障碍。
问题内容: 我正在使用每个PHP的YouTube数据API,并要求特定用户使用json格式的视频供稿。json_decode之后的结果如下(简化示例): 我的问题是:如何使用PHP访问例如“ xmlns $ media”节点?在美元符号内,它不起作用,或者有没有一种我还没有得到的方法? 问题答案: 这将起作用: 或者,您可以告诉您返回一个数组:
我试图使使用该类注册的任何元块中的子块只需要一个类来命名,也就是说,将它们命名为参数值,但不使用参数值。 虽然这是围绕一个API(Minecraft Forge)展开的,但我认为这是一个Java问题,所以我在这里快速解释一下我打算做什么。 元块由子块组成,子块是同一块的变体(例如,同一块,但仅纹理和名称发生变化)。每个子块都需要一个名称来标识它。这些名称以的形式列在类中,然后以(例如:,,等等),
问题内容: 我指的是我以前的问题,但是这次我使用了Java编译器,编译器对输出进行了编译-它给出了一个奇怪的输出。这次我用代替。 这是程序的代码。 您认为这里的问题是什么?这是Java中的错误吗? Java版本-1.6.0 JDK 我使用Eclipse运行该程序,但有一个“找不到类”异常。 是文件名…我们做了较小的编辑,并命名了一个公共类,但结果相同。我们进一步发现问题出在编译器上。 问题答案:
家长和孩子通过Angular.io官方指南中的服务示例进行交流。io在可观察的流名称中使用美元符号。 注意<代码> missionAnnounced $ < /代码>和<代码> mi 有人能解释一下吗: < li >为什么使用< code>$?这个符号背后的原因是什么?我总是需要对公共属性使用这个吗? < li >使用公共属性,但不使用方法(例如missionAnnouncements()、mis
问题内容: 美元符号($)是用于命名变量的有效字符,例如,但是当我们谈论命名约定时,何时应使用该符号? 例如,下划线最常用于分隔单词,因为不允许使用空格。 问题答案: 从Java语言规范中的标识符开始: 该字符应仅在机械生成的源代码中使用,或很少用于访问旧系统上的现有名称。
问题内容: 我定义了以下Java类: 当我尝试编译它们时,出现以下错误: 如果我删除文件并从所有文件中编译: 因此Java允许我定义一个名称中包含美元符号的类。如何编译我的原始示例? 问题答案: 之所以会发生名称冲突,是因为您定义的顶级类A $ B与类A的静态内部类B的生成名称具有相同的名称。由于两者都存在,因此编译器无法解决冲突。 JLS说: $字符仅应在机械生成的源代码中使用,或很少用于访问旧