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