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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜成龙 中级黑马   /  2013-9-19 16:29  /  866 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜成龙 于 2013-9-23 09:08 编辑

各位大神,请教一个问题!
在张老师的高新技术的JavaBean和内省中讲到,用内省的方法去操作JavaBean的属性比普通方法简单,但我怎么觉得普通方法更简单呢?
看下面的例子:
首先是用内省的方法来处理:

  1. <P>package cn.itcast.day1;</P>
  2. <P> </P>
  3. <P>import java.beans.PropertyDescriptor;</P>
  4. <P>import java.lang.reflect.Method;</P>
  5. <P>public class IntroSpectorTest1 {</P>
  6. <P> public static void main(String[] args)throws Exception {
  7.   ReflectPoint3 rp=new ReflectPoint3(6,9);
  8.   String propertyName="x";
  9.   System.out.println(getProperty(rp, propertyName));
  10.   int value=8;
  11.   setProperty(rp, propertyName, value);
  12.   System.out.println(getProperty(rp, propertyName));
  13. }
  14. private static void setProperty(Object rp, String propertyName,
  15.    int value) throws Exception {
  16.   PropertyDescriptor pd=new PropertyDescriptor(propertyName,rp.getClass());
  17.   Method methodsetX=pd.getWriteMethod();
  18.   methodsetX.invoke(rp,value);
  19. }</P>
  20. <P> private static Object getProperty(Object rp, String propertyName)
  21.    throws Exception {
  22.   PropertyDescriptor pd=new PropertyDescriptor(propertyName,rp.getClass());
  23.   Method methodgetX=pd.getReadMethod();
  24.   Object retVal=methodgetX.invoke(rp);
  25.   return retVal;
  26. }
  27. }
  28. </P>
复制代码
如果我用普通方法来操作属性值的话,可以这样吧?看下面代码
  1. package cn.itcast.day1;

  2. public class IntroSpectorTest1 {

  3. public static void main(String[] args)throws Exception {
  4. ReflectPoint3 rp=new ReflectPoint3(6,9);
  5. System.out.println(rp.getX());
  6. rp.setX(8);
  7. System.out.println(rp.getX());
  8. }
  9. }
复制代码
看上去简单多吧?你可能会问,我怎么知道有getX()和setX()方法的,因为课程里讲了JavaBean类中的属性是私有的,而提供出去的就是这种set和get形式的方法来操作属性,而事实上这些属性就是通过这些特定格式的方法来推断出来的,既然如此,我直接用这些方法来操作岂不是更方便?
可能我理解的有问题,但这确实是我的一个疑问,还望大家指教!谢谢!


评分

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

查看全部评分

3 个回复

倒序浏览
楼主连反射都省了,不错
回复 使用道具 举报
你的方法是写死的,在做框架的时候你的代码并不适合。而用内省的方法就比较灵活,你传入适当的参数它就返回相应的值给你,这是做框架的时候需要的。
回复 使用道具 举报
楼主,张老师说的内省是为了以后学习框架打基础,框架中你不知道别人会传什么类型的对象过来,是未知的,所以就要用内省。然而在你这个问题中当然是普通方法更好了,以为你知道了那个累是什么样的,也知道了里面的方法,试想一下你要是不知道呢?是不是普通方法就无法操作了,是不是就要用到内省了,希望对楼主有帮助、、、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马