Анализ байт-кода на 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 дженерики - > метаданные