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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 兜兜转转 中级黑马   /  2013-9-5 22:57  /  1118 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 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

评分

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

查看全部评分

3 个回复

倒序浏览
试着在打印的地方调用了一下pd变量的getPropertyType方法,class的位置返回的是java.lang.Class
getReadMethod方法返回java.lang.Object.getClass(),getWriteMethod方法返回null

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

评分

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

查看全部评分

回复 使用道具 举报
yangjie 发表于 2013-9-6 02:26
试着在打印的地方调用了一下pd变量的getPropertyType方法,class的位置返回的是java.lang.Class
getReadMet ...

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



这位大哥,感谢了,受教了,明白怎么回事了,上面这句话怎么理解呢?
回复 使用道具 举报
兜兜转转 发表于 2013-9-6 07:24
"又试了一下把NoteBook随便加了一个getX方法返回空字串,没写x属性,用上面的代码也会打印出一个x。“

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

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