本帖最后由 zeus00456 于 2014-8-11 10:13 编辑
看着张孝祥老师的视频,结合着之前其他老师的讲解,突然感觉对于反射好像明白些了。
于是我发个帖子说说自己的理解,希望能帮到一些比我还迷糊的童鞋,更希望与同样有自己理解的童鞋交流心得(反射机制貌似是框架需要用到的知识)。
这是从程序员的角度向代码看
如果每一个类都是一个公司的部门,里面的方法(或者将这个概念放大为成员也没有问题)是一个职务(在这个职务上的人应具有对应该职务的功能);
那么每个类的对象就是一个分部(功能一样,目标不同),里面的方法就是部员(用来实现某种功能);
反射机制就是公司的大老板跳过一级一级向下传递命令的过程,直接抽调哪个部门哪个职务的人去做事,
老板会先明确他想干什么(程序员要实现的需求,程序是程序员写的,操作是程序员指定的,所以程序员是老板)
然后明确这个需求应该交给哪个部门中干什么职务的人去干(挑选类,反射出它的成员)
最后明确具体交给哪个分部的行使这项职务的人,并明确具体的要求(传入对象和方法所需的参数)
这是从代码的角度向代码看
如果每一个类都是一个公司的部门,里面的方法是一个职务(在这个职务上的人应具有对应该职务的功能);
那么每个类的对象就是一个分部(功能一样,目标不同),里面的方法就是部员(用来实现某种功能);
反射机制就是公司的一个部门借调另个部门某个职务的人去做事,
"一个部门"会先明确它需要让人干什么(实现反射功能的语句终究是写在类中的,所以在反射时实际上是一个类中使用另一个类中的东西)
然后明确这个需求应该交给哪个部门中干什么职务的人去干(挑选类,反射出它的成员)
最后明确具体交给哪个分部的行使这项职务的人,并明确具体的要求(传入对象和方法所需的参数)
关于类借调类的解释
区别于一个类通过另一个类的对象来实现某种功能("通过另一类的对象调用"就是非反射的我们之前学习的常规调用方式,比如new String("asd").hashCode())
这种常规的方式是两个部门之间业务的正常交流,一个部门的部员需要[另一个部门的部员行使了他的职务后的结果]作为自己行使职务的依据。
int xx/*一个部门的部员*/ = new String("asd").hashCode()/*另一个部门的部员行使了自己的职务*/
这种方式的交流是很柔和的:一个部员来到另一个部门,找到这部门中的人:"哥,知道XXX不,您帮我查查"(先找对象)
而反射中的类调用类更像是上级部门的人来要求下级部门的人,它只考虑自己的需求
这也可以看做是部员与另一个部的部员的业务交流
但是这种方式的交流很狂暴:上级部员踹开了下级部门的门:"你们这,干XX工作的有活着的吗,站出来!"(先找功能)
下级部门给出回应:某职位是干这个的。然后上级部员会指定一个分部的对应职务的人,告诉他具体要求,指派它去做事。
|