A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

反射调用main(String [] args)
通过反射method.invoke(Class.getMethods("main"),new String[]{"123","455","566"})

为何指定这样的new String[]{"123","455","566"}String数组不行??
而要使用(Object)new String[]{"123","455","566"}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
相信你也是看的张孝祥老师的视频吧!最开始我也遇见过这样的问题!但是张孝祥老师在视频里面讲的很清楚!

首先后面参数需要传入的是一个数组类型的!new String[]{"123","455","566"}是一个数组类型不错,但是系统会把数组拆分,一个一个元素的传入,比如你的数组里面有3个元素,所以系统认为你传入了三个参数,所以没有找到三个参数的函数,所以会报错!而(Object)new String[]{"123","455","566"}
相当于把所有数组打包成一个Object成员,而所有数组都是Object的子类,所以不会报错!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
刘芮铭 发表于 2012-8-23 20:14
相信你也是看的张孝祥老师的视频吧!最开始我也遇见过这样的问题!但是张孝祥老师在视频里面讲的很清楚!

...

哈哈 老兄又碰到你了,被你抢答了,不过我来补充下 哈哈
回复 使用道具 举报
楼上说的很对,不过我也来热闹,热闹,哈哈,我想通过楼上你应该也明白了为什么,为什么会拆包呢,由于jdk版本原因,jdk为了兼容以前的特性,所以会把它丢给1.4处理,invoke方法1.4接受的是0bject[]数组,这个家伙又个毛病爱拆东西,所以就拆啊,一拆就不对了,那为什么那样搞搞就对了呢,(Object)new String[]{"123","455","566"}成什么了,变成对象了,不行1.4不能干了,给了1.5,那好办,1.5接收的是可变数组,所以就接受了,那就处理了,没事了,还有一种解决方法
就是把这封装成一个数组,呢我new String[]{String[]{"123","455","566"}}给1.4,哈哈你小子给我拆,你只能拆一次吧,拆了我还是数组,一样没事,哈哈。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 好嗨皮哦!

查看全部评分

回复 使用道具 举报
朱烈葵 发表于 2012-8-23 20:31
楼上说的很对,不过我也来热闹,热闹,哈哈,我想通过楼上你应该也明白了为什么,为什么会拆包呢,由于jdk ...

讲的和透彻,学习了
回复 使用道具 举报
,(Object)new String[]{"123","455","566"}成什么了,变成对象了,
刚复习下,感觉这句话不对,应该最后还是1.4处理的,只是变成Objct一个对象,1.4一看,不是数组,不拆了,应该是这样的
回复 使用道具 举报
        Object obj =new Object();
           
            test(obj);
           
        public static void test(Object [] obj)
        {
               
        }

不对 不对  还是1.5 干的  呵呵,失误失误,验证了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马