在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ 通過(guò)反射調(diào)用帶可變參數(shù)方法運(yùn)行失敗

通過(guò)反射調(diào)用帶可變參數(shù)方法運(yùn)行失敗

我通過(guò)反射調(diào)用一個(gè)帶有可變參數(shù)的方法是運(yùn)行失敗,代碼如下。

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)

這其中是有什么貓膩?

回答
編輯回答
情已空

//這樣子也可以
method1.invoke(null, new Object[]{new Object[]{1}});

2018年4月9日 21:00
編輯回答
巷尾

method1.invoke(null, (Object)new Object[]{1,"2"});

2018年4月2日 22:55
編輯回答
厭遇

這個(gè)主要是兼容問(wèn)題。為了兼容可變參數(shù)出來(lái)之前的版本,那時(shí)候主要使用數(shù)組來(lái)實(shí)現(xiàn)。所以 如果你穿入得是個(gè)數(shù)組,jvm會(huì)解開(kāi) 所以包裝一下就好了

2018年4月24日 16:58