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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


评分

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

查看全部评分

1 个回复

倒序浏览
哥们,我按照自己的理解来回答,不一定对,仅供参考首先要明确一条,反射是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呢。呵呵

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马