什么是ScalaSignature?

时间:2015-03-25 21:49:15

标签: java scala scalac scala-compiler

将Scala文件反编译为Java代码时,通常会遇到使用ScalaSignature注释的类。这些似乎只有一个注释值,有点编码的String。为什么Scala编译器会创建这样一个奇怪的构造,而不是在Attribute文件中使用自定义class

1 个答案:

答案 0 :(得分:4)

来自Storage of pickled Scala signatures in class files

  

在   遗产   存储签名的方法   作为属性   同时更优雅,   更紧凑(约15%),更简单   而不是使用注释。   但是,访问   腌渍签名   在属性中   要求   获取和解析   该   整个类文件。   由于JVM可以识别注释,因此新方法允许检索   腌制   签名   字节   直接从内部   一个正在运行的Scala程序   通过使用Java反射。

     

新方法   是   写作的持续发展的一部分   一个   好   斯卡拉   反射   图书馆。   Java反射   意见   斯卡拉   程序   简化的以Java为中心的方式。给一个   以Scala为中心的反映程序视图,由Java反射提供的信息必须   完成   找到的信息   Scala签名。   该   遗产   存储方法   本来需要的   所有   要解析的类文件   再次    -   JVM已经解析了它们   并通过反思公开他们的大部分内容。   新的存储空间   方法允许   访问   腌制Scala签名   以与其他反射信息相同的方式   获得,使新的Scala反射库更简单,更快。

     

虽然Scala反射库不是2.8版本的一部分,但它是   合意   那   现有   2.8类文件在成为时与新的反射库兼容   可用。   此外,由于2.8类文件与2.7的文件不兼容   在任何情况下,   改变   存储方法   签名   在2.8   不需要   另一个   二进制兼容   类文件格式   更改   不久之后。