黑马程序员技术交流社区

标题: 关于内省的疑惑 [打印本页]

作者: 赵崇友    时间: 2013-5-13 17:19
标题: 关于内省的疑惑
本帖最后由 赵崇友 于 2013-5-14 18:41 编辑

看到张老师有关于内省的视频,有点疑惑:
1, ”JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。”意思是内省就是java.beans包中的那些操作JavaBean的API吗?
2,内省的价值何在?既然我们可以通过创建对象来调用类中的方法,如:创建一个Person类对象,其中有getName方法,而且是公共的,我们可以直接new Person().getName()方法不就可以了吗?如果用内省操作不是更复杂些嘛?
希望有人给予解惑,先行谢过了!!

作者: 赵崇友    时间: 2013-5-13 18:54
有人帮忙解释下吗。难道这个贴要沉了吗
作者: 李征    时间: 2013-5-13 19:04
帮顶,同等大神解答
作者: Neverbelazy    时间: 2013-5-14 11:59
本帖最后由 Neverbelazy 于 2013-5-14 14:01 编辑

0. 这是一个很好的问题,最初在看张老师视频的时候我也很疑惑,不过后来慢慢理解了为什么要用反射,为什么要定义JavaBean,就理解了内省
1. JavaBean 的好处是把可能很冗长的java code中的方法按照一种特殊的约定简化的呈现给用户(获取getXxx,设置setXxx)(判断isXxx,设置setXxx)(事件xxxEvent,监听xxxListener)
2. JavaBean get,set等等的操作不仅仅是 getName 返回一个名字, setName 设置一个名字这样简单, 比如 getFile(filePath)就可能是结合了读取流的操作从硬盘上读取一个文件, setVisible(boolean)也不只是传入一个true/false,而可以设定把file通过流展现在某个指定的显示区域
3. 内省IntroSpector的机制其实就是反射的机制,只不过IntroSpector封装了找到一个类中getXxx,setXxx等符合JavaBean规范的方法,也可以说,IntroSpector是只针对JavaBean规范的类的简便的实现反射的API
4. 所以, 你的问题就其实等价于 为什么要用“反射”, 比如 我可以通过一个 Person.study(); 调用一个Person类的静态方法, 为什么非要 Person.class.getMethod("study",null).invoke(null,null);来实现,
5. 所以想想为什么我们需要用反射,就明白为什么JavaBean要用内省了

作者: eycrckag    时间: 2013-5-14 12:11
其实你问题就是反射!把老师讲的从反射的基础class类开始看几遍,你就明白了
作者: 赵崇友    时间: 2013-5-14 18:41
Neverbelazy 发表于 2013-5-14 11:59
0. 这是一个很好的问题,最初在看张老师视频的时候我也很疑惑,不过后来慢慢理解了为什么要用反射,为什么要定 ...

现在想想也是的……多谢了!!学习了!!!




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