java在ASM字节码库中获取泛型信息
我正在使用ASM库解析Java字节码,现在我正在尝试解析一个方法,而且我的方法很好。但在解析方法的参数时,我遇到了一个小问题,尤其是如果PARAMTER是通用列表、数组、集合等,则考虑到该方法的java代码。
public MethodVisitor visitMethod(int arg0, String arg1, String arg2,
String arg3, String[] arg4)
{
System.out.println("Method params: " + arg2);
}
只是打印:
(Ljava/util/List;)V
对于此方法参数:
List<String> foo;
正如你所看到的,我已经失去了<
和>
之间的所有东西。我知道泛型类型的擦除
但是我需要这些信息来知道什么类型的列表不仅仅是java/util/List
。是否仍然可以使用ASM库获取此信息
# 1 楼答案
ASM有一个SignatureVisitor可以用来访问类型签名。这些包含类、方法和访问字段的泛型信息
您可以在第4.1节-泛型下的asm guide中找到关于它的更多信息