Анализ байт-кода в Java

Я работаю над проектом анализа байт-кода, для которого я использую ASM. Все идет хорошо, я могу успешно анализировать, получать информацию о классах и методах.

Но я застрял в понимании представления байт-кода для дженериков. Вот один пример из java.util.list, когда я использую visitMethod из ClassVisitor для печати информации, это то, что я получаю для одной из сигнатур метода:

(ILjava/util/Collection<+TE;>;)Z

Вот пытаюсь разобрать по порядку и разобраться в аргументах метода:

  • I означает целое число
  • Ljava/util/Collection означает, что это аргумент типа Collection

Но я застрял на типе дженериков, т.е. <+TE> и т. д. Кто-нибудь может мне помочь? Я пытался искать, но не получил достаточно информации. Если у кого-нибудь есть список имен байт-кодов, не могли бы вы поделиться со мной?


person Pradeep Simha    schedule 28.10.2013    source источник


Ответы (1)


+ обозначает общий extends, а TE означает, что существует тип var E

Таким образом, в исходном коде это будет выглядеть так:

 Collection<? extends E>   -> Ljava/util/Collection<+TE;>

Взгляните на руководство пользователя asm, раздел 4.1.1 Generics -> Metadata.

person René Link    schedule 28.10.2013
comment
Отлично и спасибо. Этого должно быть достаточно, я пойду вперед. :) - person Pradeep Simha; 28.10.2013