Почему при запуске javap в скомпилированном классе Scala появляются странные записи в постоянном пуле?

При запуске javap -v в скомпилированном классе, полученном из этого бита Scala (окончательная версия 2.8.1):

Класс 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 на Mac 10.6, если это что-то изменит - завтра я попытаюсь повторить репликацию, когда у меня появятся другие операционные системы, и я буду обновляться соответствующим образом.

1 ответ

Решение

В элементе ScalaSignature хранится дополнительная информация о типе, которая нужна Scala. Теперь он хранится (очевидно, в кодировке) в аннотациях, чтобы его можно было использовать для инструментов отражения.

Другие вопросы по тегам