在 SO 上回答这个其他问题时,我遇到了这个我无法理解的奇怪问题。为什么 Method 类的反射“调用”方法需要将 varargs 参数包装在数组中才能工作?
其他具有可变参数的类方法运行良好,只需以正常方式调用它们......
public class Main {
public static void main(String[] args){
try {
Class<?> p = Main.class;
String[] arguments1 = {"ciao"};
String[] arguments2 = {"salve"};
String[] arguments3 = {"buonasera"};
Method m = p.getDeclaredMethod("showIt",String[].class);
//this is ok
showIt(arguments1);
//this is ok
m.invoke(null, new Object[]{arguments2});
//this throws IllegalArgumentException!!
m.invoke(null, arguments3);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void showIt(String[] result) {
System.out.println(result[0]);
}
}
调用方法有什么特别之处?