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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵崇友 中级黑马   /  2013-5-13 17:19  /  1557 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵崇友 于 2013-5-14 18:41 编辑

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

评分

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

查看全部评分

5 个回复

倒序浏览
有人帮忙解释下吗。难道这个贴要沉了吗
回复 使用道具 举报
帮顶,同等大神解答
回复 使用道具 举报
本帖最后由 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:24
报纸
其实你问题就是反射!把老师讲的从反射的基础class类开始看几遍,你就明白了
回复 使用道具 举报
Neverbelazy 发表于 2013-5-14 11:59
0. 这是一个很好的问题,最初在看张老师视频的时候我也很疑惑,不过后来慢慢理解了为什么要用反射,为什么要定 ...

现在想想也是的……多谢了!!学习了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马