使用asm如何显式声明可变参数

With asm how to explicitly declare a variable parameter

对于一个方法:

String invoke(Object... args)

当我使用 asm ClassVisitor 读取这个方法时,我看到:

([Ljava/lang/Object;)Ljava/lang/String;

是的,参数args变成了对象数组,也就是说:可变参数是数组的语法糖。

但是当我使用 javap 显示字节码时:

public java.lang.String invoke(java.lang.Object...);

我很困惑为什么 javap 知道 args 是变量 Object...,而不是数组类型 Object[]

答案:

方法访问标志:ACC_VARARGS

方法访问标志:ACC_VARARGS