| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 813 人关注过本帖
标题:invoke(new int[])运行时会不会把里面的数组拆开
只看楼主 加入收藏
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:10 
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
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:5 
有吗?
可以不加的啊
在参数前加类型是转型用的,object任意类型都可以,加和不加没有什么区别吧,不知道说的对不对

学海无涯#¥%……&*(
2013-10-15 13:56
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
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:0 
你的jdk版本是多少,我的不会啊,我的是6的。只是个警告而已。无所谓的。这个方法里的参数是可以任意型和个数的,一般不会出现你的问题,你看下是不是jdk的问题,
另外不客气。能帮到你很高兴

学海无涯#¥%……&*(
2013-10-15 15:13
cocosmile7
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-9-29
收藏
得分:0 
我的也是6的,会出现这个问题,我是看张孝祥老师的视频他是讲new String[]前面要加(Object),但不知道为什么int的就不加也能编译
2013-10-15 18:20
ghjsmzy
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:187
专家分:573
注 册:2009-6-17
收藏
得分:5 
我的6编译也没有报错
2013-10-15 18:35
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
ghjsmzy
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:187
专家分:573
注 册:2009-6-17
收藏
得分:0 
我查了一下觉得应该是int是基本类型转换成功,而String不是基本类型,在转换时出错了,而报wrong number of arguments错误,所以需要加(Object)做人工转换。
API中有这个方法的使用说明,其参数类型就是Object
invoke(Object obj, Object... args)
          Invokes the underlying method represented by this Method object, on the specified object with the specified parameters.

然后,你看一下这个连接,对你应该也有帮助http://wenwen.
2013-10-15 19:29
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.029652 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved