Ответ 1
Элемент ScalaSignature содержит информацию о дополнительном типе, который нужен Scala. Он теперь сохраняется (кодируется, очевидно) в аннотациях, чтобы он мог быть доступен для инструментов отражения.
При запуске javap -v на скомпилированном классе, полученном из этого бита Scala (окончание версии 2.8.1):
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 раньше.
Я использую OpenJDK 7 build на Mac 10.6, если это имеет значение - я буду пытаться реплицировать завтра, когда у меня есть другие операционные системы, и будет соответствующим образом обновляться.
Элемент ScalaSignature содержит информацию о дополнительном типе, который нужен Scala. Он теперь сохраняется (кодируется, очевидно) в аннотациях, чтобы он мог быть доступен для инструментов отражения.