黑马程序员技术交流社区

标题: JavaBean问题 [打印本页]

作者: 兜兜转转    时间: 2013-9-5 22:57
标题: JavaBean问题
本帖最后由 杨增坤 于 2013-9-11 17:45 编辑
  1. import java.beans.BeanInfo;
  2. import java.beans.Introspector;
  3. import java.beans.PropertyDescriptor;
  4. import java.lang.reflect.Method;
  5. public class JavaBeanDemo1
  6. {
  7. public static void main(String[] args) throws Exception
  8. {
  9. NoteBook myNoteBook = new NoteBook("Lenovo G470", 4800);
  10. BeanInfo info = Introspector.getBeanInfo(myNoteBook.getClass());
  11. PropertyDescriptor[] pds = info.getPropertyDescriptors();
  12. for(PropertyDescriptor pd : pds)
  13. {
  14. System.out.println(pd.getName());
  15. }
  16. }

  17. }

  18. class NoteBook
  19. {
  20. private String name ;
  21. private int price;
  22. public NoteBook(String name , int price)
  23. {
  24. this.name = name ;
  25. this.price = price;
  26. }
  27. public void setName(String name )
  28. {
  29. this.name = name;
  30. }
  31. public String getName()
  32. {
  33. return this.name;
  34. }
  35. public void setPrice(int price)
  36. {
  37. this.price = price;
  38. }
  39. public int getPrice()
  40. {
  41. return this.price;
  42. }
  43. }
复制代码
为什么打印结果中第一行多一个class?
执行结果:
class
name
price


作者: yangjie    时间: 2013-9-6 02:26
试着在打印的地方调用了一下pd变量的getPropertyType方法,class的位置返回的是java.lang.Class
getReadMethod方法返回java.lang.Object.getClass(),getWriteMethod方法返回null

应该是这个类从Object继承了getClass方法,内省把这个类作为JavaBean读取的时候,因为有对应get方法,它就认为有一个class属性,就给读出来了。
又试了一下把NoteBook随便加了一个getX方法返回空字串,没写x属性,用上面的代码也会打印出一个x。

作者: 兜兜转转    时间: 2013-9-6 07:24
yangjie 发表于 2013-9-6 02:26
试着在打印的地方调用了一下pd变量的getPropertyType方法,class的位置返回的是java.lang.Class
getReadMet ...

"又试了一下把NoteBook随便加了一个getX方法返回空字串,没写x属性,用上面的代码也会打印出一个x。“



这位大哥,感谢了,受教了,明白怎么回事了,上面这句话怎么理解呢?

作者: yangjie    时间: 2013-9-6 08:32
兜兜转转 发表于 2013-9-6 07:24
"又试了一下把NoteBook随便加了一个getX方法返回空字串,没写x属性,用上面的代码也会打印出一个x。“

就是验证一下这个原理
用你主楼的代码,在NoteBook里加了一个getX方法,但是没定义x这个属性。
打印的结果也会变成
class
x
name
price
这样。






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