在Scala(版本2.8.1 final)的编译类上运行javap -v时:
class Point(x:Int,y:Int)
我得到常量池条目的以下输出,以及指示不可打印字符的几个终端蜂鸣声?
#19 = Utf8 Lscala/reflect/ScalaSignature;
#20 = Utf8 bytes
#21 = Utf8 \t2\"\t!!>Lg9A(Z7qift4A\nqCA\r!BA
aM\4
-\tAA[1wC&Q\nTWm;=R\"\t
E\tQa]2bYL!a\tMr\1PE*,7\r\t+\t)A-\t/%:$
eDu\taP5oSRtDc!CAqA!)Qca-!)!da-
#22 = Utf8 RuntimeVisibleAnnotations
#23 = Utf8 Point
#24 = Class #23 // Point
知道发生了什么,为什么?我之前从未见过CONSTANT_Utf8条目中的二进制垃圾。
我在Mac 10.6上使用OpenJDK 7版本,如果这有所不同 - 我将尝试在明天复制我有其他操作系统时,并会相应更新。
答案 0 :(得分:8)
ScalaSignature元素是存储Scala所需的额外类型信息的位置。它现在正在注释中存储(显然编码),以便它可以用于反射工具。