我正在开发一个字节码分析项目,我正在使用ASM。一切都很顺利,我能够成功解析,获得类和方法信息。
但我一直在理解泛型的字节码表示。以下是java.util.list
的一个示例,当我使用visitMethod
中的ClassVisitor
来打印信息时,这是我为该方法的签名之一获取的内容:
(ILjava/util/Collection<+TE;>;)Z
这里我试图逐个反汇编并理解方法的论点:
I
代表int Ljava/util/Collection
代表Collection
但是我被困在泛型类型<+TE>
等等。任何人都可以指导我吗?我试图搜索但没有得到足够的信息。如果有人有字节码名称列表,请与我分享一下吗?
答案 0 :(得分:12)
+
代表通用extends
,而TE
代表类型var E
因此在源代码中它看起来像:
Collection<? extends E> -> Ljava/util/Collection<+TE;>
查看asm user guide部分4.1.1 Generics - &gt;元数据