| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 813 人关注过本帖
标题:invoke(new int[])运行时会不会把里面的数组拆开
取消只看楼主 加入收藏
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:5 
invoke(new int[])运行时会不会把里面的数组拆开
public static void test1() throws Exception{
        Class clazz = Class.forName("javaWeb.Person");
        Method method = clazz.getMethod("main", String [].class);
        method.invoke(null,(Object)new String[] {"aa","bb"});   
    }
    public static void test2() throws Exception{
        Class clazz = Class.forName("javaWeb.Person");
        Method method = clazz.getMethod("run", int [].class);
        method.invoke(null,new int[] {1,5});
    }
     上面两个函数中的invoke方法为什么new String[]前面要加一个(Object),而new int[]前面不用啊??
搜索更多相关主题的帖子: Object public method null 
2013-10-15 13:16
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
收藏
得分:0 
回复 2楼 java小蚂蚁
如果method.invoke(null,(Object)new String[] {"aa","bb"}); 中不加上那个(Object),编译后会出现参数个数不匹配错误,也就是说会把那个String数组拆开里面有两个字符串即编译器会认为传了两个参数,故要把它转成Object类型编译器就不会去把它拆开,但不知道为什么下面的int类型的就不用这样也能编译
2013-10-15 14:12
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
收藏
得分:0 
回复 2楼 java小蚂蚁
我发现每次我在这里问问题都是你回答我,谢谢啊!!非常感谢!!
2013-10-15 14:14
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
收藏
得分:0 
我的也是6的,会出现这个问题,我是看张孝祥老师的视频他是讲new String[]前面要加(Object),但不知道为什么int的就不加也能编译
2013-10-15 18:20
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
收藏
得分:0 
回复 7楼 ghjsmzy
如果我把(Object)去掉就会出现如下错误
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:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at JavaWeb.methodTest1.test1(methodTest1.java:15)
    at JavaWeb.methodTest1.main(methodTest1.java:9)
2013-10-15 18:45
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
收藏
得分:0 
回复 9楼 ghjsmzy
根据你说的让我觉得应该是invoke()接收的第一个参数是Object类型,String就已经是Object型,String[]就相当于一个Object类型的数组,编译时遇到数组就会把数组中的数据拆开来,因此里面就有2个数据就会出现个数不匹配,而int不是Object型,int[]才是Object型,传一个int[]即传一个Object,已经是Object型了就不会再拆了,所以也就是只传了一个参数,你觉得我这样理解有道理吗?
2013-10-15 22:54
快速回复:invoke(new int[])运行时会不会把里面的数组拆开
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014014 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved