我通過反射調(diào)用一個帶有可變參數(shù)的方法是運行失敗,代碼如下。
public class Main {
public static void func(Object... objs){
for (Object obj : objs){
System.out.println(obj);
}
}
public static class Tester{
public static void main(String... args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class<?> clazz = Class.forName("com.xxxx.Main");
Method method1 = clazz.getMethod("func", Object[].class);
method1.invoke(null, new Object[]{1, "2"});
}
}
}
異常信息如下
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.zeeker.reflect.Main$Tester.main(Main.java:30)
這其中是有什么貓膩?
3 回答

MYYA
TA貢獻(xiàn)1868條經(jīng)驗 獲得超4個贊
這個主要是兼容問題。為了兼容可變參數(shù)出來之前的版本,那時候主要使用數(shù)組來實現(xiàn)。所以 如果你穿入得是個數(shù)組,jvm會解開 所以包裝一下就好了
添加回答
舉報
0/150
提交
取消