黑马程序员技术交流社区

标题: 反射问题 [打印本页]

作者: 赵亚威    时间: 2013-4-5 11:27
标题: 反射问题
本帖最后由 赵亚威 于 2013-4-5 12:59 编辑

class ReflectTest{
        public static void main(String[] args)throws Exception{
        String str= "itcastheima.com" ;
                str.charAt(0);   
                Method method=String.class.getMethod("charAt", int.class);
     System.out.println(method.invoke(str,new Object[]{1} ));//为什么不直接赋予一个整数呢?
     //这不很麻烦嘛

}
}
作者: 谢波    时间: 2013-4-5 11:46
                可以啊
作者: 刘焕新    时间: 2013-4-5 12:06
本帖最后由 刘焕新 于 2013-4-5 12:31 编辑

这个很好理解啊!首先你要注意的是Object和Object[]的区别,前者是个对象,后者是个数组,数组可包含N个对象。
将invoke方法的参数定义为Object[]就是为了增强它的通用性,因为invoke()实际可以调用的方法千千万,它们参数个数是不一定的。
所以API约定,你要用Method的invoke方法,传入参数就必须是Object[]数组类型。这样,invoke方法内部会将Object[]数组转换为实际调用方法所需的参数类型。

当你传入的参数是基本数据类型时,JVM会自动将基本数据类型封装成其包装类的对象,即:自动装箱。所以,此时参数变成了一个Object对象。
然后这个Object对象被传进去之后,invoke方法不知道、也不会管你传入的参数实际是什么类型,仍然把参数当做Object[]数组类型去使用,后果自然就很可能会出错啦。





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