本帖最后由 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要用内省了
|