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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王雷1 中级黑马   /  2013-11-27 12:28  /  1225 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王雷1 于 2013-11-27 14:01 编辑

张孝祥老师将的javabean内省,我做了好几回,但是没有看明白。如果有两个类型相同的属性,且都是javabean,我如何才能做到能任意问                  千万别告诉我不能,我感觉不大现实

4 个回复

倒序浏览
内省实际上就是反射,只是它有自己的命名规范,可以便于使用,所以定义了一个类Introspector来专门对它进行操作。
如果不用内省,直接用反射也是可以的。比如getX,我们只知道有x这个属性,就把"x"-->"X"-->"getX"-->Class.forName("getX")-->involu 是一样的,同样调用了getX这个方法。所以不要把内省想的很复杂。
一个类中如果有两个类型相同的属性,那么他们的变量名肯定是不同的啊。比如int a ;  int b ; 怎么可能有两个int a;呢?那不是重定义了吗,语法就错误了。如果是不同的类中有两个相同类型的属性,那就更没影响了,内省中传入的参数就有.class文件的对象,是能区分出你是调用了那个类的。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
衣带赞 发表于 2013-11-27 14:17
内省实际上就是反射,只是它有自己的命名规范,可以便于使用,所以定义了一个类Introspector来专门对它进行 ...

也就是说我无法用内省的方式,只能用反射的方式?对么?
回复 使用道具 举报
王雷1 发表于 2013-11-27 14:19
也就是说我无法用内省的方式,只能用反射的方式?对么?

没太懂你到底要表达什么意思,内省实质上就是一种反射,你用内省就是用反射啊。
只不过你不觉得直接用反射有点麻烦吗,要把一个成员变量变成字符串,还要区分大小写,再加上get、set方法,而且我调用这个成员变量就是为了set它的值或者get它的值,这么简单的操作还要一大堆代码来实现。为了简化操作,所以规范了一种命名方式,就是方法都用get 、 set 来命名,并且把这些复杂的代码简化,定义成一个新的类,这样不是更方便操作吗?
所有就有了Introspector类,再简单点就用PropertyDescriptor类直接获取里面的2种方法。
不过后来有人觉得这样还是复杂了,干脆再直接点,又定义了一个BeanUtils.jar包,里面封装了setProperty和getProperty方法,只要一行代码就实现了内省。也就是说在不断简化代码的过程中出现了内省这样的机制。
回复 使用道具 举报
衣带赞 发表于 2013-11-27 14:34
没太懂你到底要表达什么意思,内省实质上就是一种反射,你用内省就是用反射啊。
只不过你不觉得直接用反 ...

非常感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马