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

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

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

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

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

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

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

1 ответов


на + - Это универсальный extends С TE означает, что существует тип var E

в исходном коде это будет выглядеть так:
 Collection<? extends E>   -> Ljava/util/Collection<+TE;>

посмотри АСМ руководство пользователя раздел 4.1.1 дженерики - > метаданные