Java中的字节码分析

时间:2013-10-28 10:21:44

标签: java bytecode java-bytecode-asm bytecode-manipulation

我正在开发一个字节码分析项目,我正在使用ASM。一切都很顺利,我能够成功解析,获得类和方法信息。

但我一直在理解泛型的字节码表示。以下是java.util.list的一个示例,当我使用visitMethod中的ClassVisitor来打印信息时,这是我为该方法的签名之一获取的内容:

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

这里我试图逐个反汇编并理解方法的论点:

  • I代表int
  • Ljava/util/Collection代表Collection
  • 类型的参数

但是我被困在泛型类型<+TE>等等。任何人都可以指导我吗?我试图搜索但没有得到足够的信息。如果有人有字节码名称列表,请与我分享一下吗?

1 个答案:

答案 0 :(得分:12)

+代表通用extends,而TE代表类型var E

因此在源代码中它看起来像:

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

查看asm user guide部分4.1.1 Generics - &gt;元数据