【发布时间】:2017-10-27 03:16:32
【问题描述】:
在我的代码中,我使用 classTag[JValue] 想要获取 org.json4s.JsonAST.JValue ,
但实际上它返回 org.json4s.JsonAST$JValue,很奇怪!为什么会有$?
我是使用scala的新手,有人可以回答我吗?非常感谢
【问题讨论】:
在我的代码中,我使用 classTag[JValue] 想要获取 org.json4s.JsonAST.JValue ,
但实际上它返回 org.json4s.JsonAST$JValue,很奇怪!为什么会有$?
我是使用scala的新手,有人可以回答我吗?非常感谢
【问题讨论】:
您用来指代类/方法/等的名称。在您的代码中,它在编译器生成的字节码中的名称不必相同。 Scala 编译器需要比 Java 编译器更多地进行这种名称修饰,但这种特定情况对于两者都是相同的。
原因是内部类在 JVM 上并不真正存在:它们是普通类,具有包含外部实例的附加字段。该类的 JVM 名称类似于 <outer_class>$<inner_class>。
在 Scala 和 Java 中,名称中的 $ 通常表示它在某种程度上被破坏了(尽管它也是程序员可以使用的合法字符)。
【讨论】:
ClassTag(或者更确切地说是用toString打印的方式)。如果您希望类 name 采用您想要的形式,replace("$", ".") 将适用于这种情况。处理所有名称修改会更加困难。
replace("$", "."),但不是很好,无论如何谢谢你的回答