黑马程序员技术交流社区

标题: 关于JavaBean和内省的问题 [打印本页]

作者: 杜成龙    时间: 2013-9-19 16:29
标题: 关于JavaBean和内省的问题
本帖最后由 杜成龙 于 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形式的方法来操作属性,而事实上这些属性就是通过这些特定格式的方法来推断出来的,既然如此,我直接用这些方法来操作岂不是更方便?
可能我理解的有问题,但这确实是我的一个疑问,还望大家指教!谢谢!



作者: 神之梦    时间: 2013-9-19 20:44
楼主连反射都省了,不错
作者: 罗凯健    时间: 2013-9-21 20:26
你的方法是写死的,在做框架的时候你的代码并不适合。而用内省的方法就比较灵活,你传入适当的参数它就返回相应的值给你,这是做框架的时候需要的。
作者: yting_xmei1129    时间: 2013-9-22 15:29
楼主,张老师说的内省是为了以后学习框架打基础,框架中你不知道别人会传什么类型的对象过来,是未知的,所以就要用内省。然而在你这个问题中当然是普通方法更好了,以为你知道了那个累是什么样的,也知道了里面的方法,试想一下你要是不知道呢?是不是普通方法就无法操作了,是不是就要用到内省了,希望对楼主有帮助、、、




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