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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 hoyouly 于 2013-9-26 08:33 编辑

为什么会出现这种情况,Person类中有两个方法
public static void run(String [] x){}
public static void run(int [] x){}

当通过反射调用者两个方法的时候
        @Test
        public void testRun() throws Exception{
                Class clazz=Class.forName("reflect.Person");
                Method method=clazz.getMethod("run", String[].class);
                method.invoke(null, new Object[]{new String []{"11","22"}});        
        }
        @Test
        public void testRun2() throws Exception{
                Class clazz=Class.forName("reflect.Person");
                Method method=clazz.getMethod("run", int[].class);
                method.invoke(null, new int []{11,22});               
        }


为什么int型数组的参数就用不在把封装到Object数组中啊,这是个怎么情况啊,求解释,

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
我把JDK的话给你贴一下吧:
如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。

因为int数组会进行自动封装,不会直接被解析,所以它不需要封装到Object数组里面

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
因为这句话不报错:Object[] objString=new String[]{"123","234","345"};
这句话报错:      Object[] objInt=new int[]{1,2,3};
回复 使用道具 举报
罗凯健 发表于 2013-9-25 22:54
我把JDK的话给你贴一下吧:
如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一 ...

哦,明白了,谢谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马