黑马程序员技术交流社区

标题: 关于反射中调用方法中 参数类型是数组的问题 [打印本页]

作者: hoyouly    时间: 2013-9-25 22:25
标题: 关于反射中调用方法中 参数类型是数组的问题
本帖最后由 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数组中啊,这是个怎么情况啊,求解释,

作者: 罗凯健    时间: 2013-9-25 22:54
我把JDK的话给你贴一下吧:
如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。

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

作者: 神之梦    时间: 2013-9-25 23:03
因为这句话不报错:Object[] objString=new String[]{"123","234","345"};
这句话报错:      Object[] objInt=new int[]{1,2,3};
作者: hoyouly    时间: 2013-9-26 08:32
罗凯健 发表于 2013-9-25 22:54
我把JDK的话给你贴一下吧:
如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一 ...

哦,明白了,谢谢啊





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2