Java中的字节码分析

12

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

但是我卡在了理解泛型的字节码表示上。当我使用ClassVisitorvisitMethod来打印信息时,以下是我得到的java.util.list中一个方法签名的示例:

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

我正在逐个拆解并理解该方法的参数:

  • I 代表整数类型
  • Ljava/util/Collection 代表参数是 Collection 类型

但是我卡在了泛型类型,比如<+TE>等。有人能指导我吗?我尝试过搜索,但没有足够的信息。如果有人有字节码名称列表,麻烦分享一下。

1个回答

14

+ 表示泛型的 extends,而 TE 表示存在一个类型变量 E

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

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

请查看asm用户指南4.1.1泛型->元数据部分,第68页。


太好了,谢谢。这就足够了,我会继续进行的。 :) - Pradeep Simha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接