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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 和心愿 中级黑马   /  2012-3-23 11:23  /  1808 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

通过暴力反射可以访问和设置类的私有属性,那么封装是不是就没有什么作用了呢?求解

4 个回复

倒序浏览
所以除非必要不建议使用阿~~~
回复 使用道具 举报
我觉得java反射机制和java封装特性不冲突吧,反射是可以访问对象的私有属性、并且更改它,但前提是得有一个对象,这个对象调用的自己的私有方法,很正常,就算它更改了属性值,也只是这个对象的,而其他的对象不会有影响。封装不就是影藏属性,但还是提供set、get方法吗。不过话说这反射机制还真是强大啊。
回复 使用道具 举报
封装是面向对象的特性,将属性和方法封装到类里。对于程序员来说,封装使代码简洁、逻辑清晰、而且方便后期的维护。封装一般是对于后台程序来说的,用户主要是通过前台jsp页面与程序交互,对于后台的实现用户是看不到的。
回复 使用道具 举报
本帖最后由 崔岩 于 2012-3-23 17:40 编辑

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