黑马程序员技术交流社区

标题: 反射常用方法中,为什么都都是class或Onject类型的参数? [打印本页]

作者: 兜兜转转    时间: 2013-8-31 08:21
标题: 反射常用方法中,为什么都都是class或Onject类型的参数?
刚学到反射,感觉很吃力,首先想问的一个问题,反射的作用到底是什么呢?觉得张老师的视频讲的不是那么详细,那么深入,而且上课的都是使用方言,听起来很吃力。
     问题1: 反射常用类中的一些方法都要传Class类型的参数呢?
                                    比如: Class类中的getConstructor(Class... parameterTypes)???我直接穿传基本数据类型或引用类型不可以吗?
                                              Class类中的getMethod(String name, Class... parameterTypes)????我直接穿传基本数据类型或引用类型不可以吗?
                                    同理:    Method 类中的invoke(Object obj, Object... args)为什么有是Object 类型的参数呢?第一个我理解是指定在哪个对象上执行,后面的为什么有要写成Object类型?我直接穿传基本数据类型或引用类型不可以吗?



作者: wahaha    时间: 2013-8-31 08:50
哥们,我按照自己的理解来回答,不一定对,仅供参考首先要明确一条,反射是java提供的方法,为什么这样,你可以先简单的理解为,java就这么定的,你想想啊,不这么定义方法难道能有更简洁的方式么?

比如: Class类中的getConstructor(Class... parameterTypes)???我直接穿传基本数据类型或引用类型不可以吗?
这里是获取一个类的构造函数,构造函数里的参数也都是要用反射的方式找到的,你说你传个String,编译器能找到么?这是比较底层的操作,与我们在一般方法里进行操作不同,都是拿内存中的2进制去操作,怎么说呢,构造函数加载到内存里面他的参数引用也应该是Class类型的,而不是我直接拿来引用的其他类型,我们直接应用是导了包的(手动导包,或默认导包)。

Class类中的getMethod(String name, Class... parameterTypes)????我直接穿传基本数据类型或引用类型不可以吗?
同上


同理:    Method 类中的invoke(Object obj, Object... args)为什么有是Object 类型的参数呢?第一个我理解是指定在哪个对象上执行,后面的为什么有要写成Object类型?我直接穿传基本数据类型或引用类型不可以吗?
同上,补充,为什么传Object是多态的思想,用最高父类来接收,这个很容易理解了,因为你不确认这个参数到底是什么类型的,就用Object接收,要调用子类本身的方法的话,再强转就OK了,不这么定义,才会有bug呢。呵呵





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