我正在使用ASM库来解析Java字节码,现在我正在尝试解析一个方法,而且我的方法很好。但是我在解析方法的参数并将其转换为等效的Java源代码时面临一些问题,特别是如果参数类型为Generic List,ArrayList,Set等。请考虑此方法访问者代码:
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;
正如您所看到的,我已经丢失了<
和>
之间的所有内容。我知道对于泛型类型的擦除。
但我需要这些信息才能知道哪种类型的List不仅仅是java/util/List
。无论如何使用ASM库获取此信息?
答案 0 :(得分:3)
ASM有一个SignatureVisitor,您可以使用它来访问类型签名。那些包含访问过的类,方法和字段的泛型信息。
您可以在asm guide下的4.1 - generics
部分找到更多相关信息