12

我正在做一个字节码分析项目,为此我正在使用 ASM。一切顺利,我能够成功解析、获取类和方法信息。

但我一直在理解泛型的字节码表示。java.util.list这是我使用visitMethodfrom打印信息时的一个示例ClassVisitor,这是我得到的方法签名之一:

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

这里我尝试一一拆解,理解方法的论据:

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

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

4

1 回答 1

12

+代表泛型extends,而意味着TE有一个类型 varE

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

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

查看asm 用户指南第 4.1.1 节泛型 -> 元数据

于 2013-10-28T10:35:45.753 回答