我正在使用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库获取此信息吗? 最佳答案
ASM具有SignatureVisitor,您可以使用它访问类型签名。这些包含类,方法和所访问字段的泛型信息。
您可以在asm guide的第4.1节-泛型中找到有关此信息的更多信息