本帖最后由 崔岩 于 2012-3-23 17:40 编辑
这就要理解反射到底是用来做什么的了。其实它和封装性面向的不是一类问题。
封装呢,指的是在编写同一个项目的程序员之间,隐藏了我这个方法的细节,你只要用我提供给你的接口就好了,你不必改我的内容,也不用知道我怎么实现的。这个是在大家在一个程序中,各负责一个部分时,互相合作时的一个安全的机制。
而反射的用处呢,是在一些框架中,也就是在框架内部使用了反射技术来操作你的代码。
首先呢,框架是通用的,比如hibernate,全世界大家用的是一个版本。而做框架的人显然不是跟你做同一个项目的同事,你的程序和框架之间的关系,不是一个程序中的各个模块之间的关系。框架中反射所做的事,从本质上讲,并不是和你的代码合作去处理某个业务,而只是他在用反射的方式操作你写出来的代码帮你完成一些繁杂的事情。
举个例子:就好像你是个足球前锋,你和你的队友之间需要封装,后卫只需要把球传给你,而不需要指示你去怎么做。而反射好比你在踢球时候,在脚上安装了一个动力装置,他可以控制你的脚力大小,校准角度。所以你和这个动力装置之间是谈不上封装的问题的。
说白了,反射实现的动作,也是操作你实现的,这个动作即使不用反射也是你本来就想要做的,反射只是不需要你在手动去做了,不管应用反射与否都一样。
举个实际例子就是,你在编程时候要查询数据库里的数据,肯定要写JDBC程序,建连接池,写SQL等等,而用hibernate之后呢,只做个配置文件,之后hibernate就帮你把数据库连接池的功能做好了,而且你也可以直接在程序中使用变量,而不用操作数据库中的字段了。就是不用反射,这个动作你也是要做的,这里和封装性没什么关系 |