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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨玲 于 2013-2-17 21:56 编辑
  1. //获得我的bean类的字节码,并用它创建一个对象
  2.                          Class clazz = MyJavaBean.class;
  3.                         Object obj = clazz.newInstance();

  4.                 //得到这个类的bean信息.
  5.                         BeanInfo info = Introspector.getBeanInfo(clazz);
  6.                         //获得属性描述符数组
  7.                         PropertyDescriptor[] pds = info.getPropertyDescriptors();
  8.                         //下面就是分别对属性描述符的的不同类型赋一个初值,然后打印.
  9.                         for(PropertyDescriptor pd : pds)
  10.                         {
  11.                                 //问题是在这下面调用方法的时候会出现IllegalArgumentException异常
  12.                                 
  13.                                 Class type = pd.getPropertyType();
  14.                                 if (Integer.class.equals(type))
  15.                                 {
  16.                                         pd.getWriteMethod().invoke(obj, 100);                                         
  17.                                 }
  18.                                 if(Double.class.equals(type));
  19.                                 {
  20.                                         pd.getWriteMethod().invoke(obj, 0.01d);
  21.                                 }
  22.                                 if(String.class.equals(type));
  23.                                 {
  24.                                         pd.getWriteMethod().invoke(obj, "www.itheima.com");
  25.                                 }
  26.                                 if(Boolean.class.equals(type))
  27.                                 {
  28.                                         pd.getWriteMethod().invoke(obj, true);
  29.                                 }
  30.                         }
  31.                         System.out.println(obj);
复制代码
帮我分析分析,这是哪里的问题呢,for循环中的if语句里面的:pd.getWriteMethod().invoke方法调用都会报错.

7 个回复

倒序浏览
    for(PropertyDescriptor pd : pds)
                        {
                                //问题是在这下面调用方法的时候会出现IllegalArgumentException异常
                                
                                Class type = pd.getPropertyType();
                                if (Integer.class.equals(type))
                                {           
                                  //这里的obj是Object类型的,你需要向下转型,写成   (MyJavaBean )obj;下边雷同哦!
                                   pd.getWriteMethod().invoke(obj, 100);                           
                                }
                                if(Double.class.equals(type));
                                {
                                        pd.getWriteMethod().invoke(obj, 0.01d);
                                }
                                if(String.class.equals(type));
                                {
                                        pd.getWriteMethod().invoke(obj, "www.itheima.com");
                                }
                                if(Boolean.class.equals(type))
                                {
                                        pd.getWriteMethod().invoke(obj, true);
                                }
                        }
回复 使用道具 举报
刘军亭 发表于 2013-2-17 20:43
for(PropertyDescriptor pd : pds)
                        {
                                //问 ...

呵呵,如果是这样就最好不过了,可是我试过了不行呢.我把前面的
Object obj = clazz.newInstance();
换成了
MyJavaBean obj = new MyJavaBean();
还是不行!
反射当中不存在这个问题的
回复 使用道具 举报
哥们,那样的话,你的成员变量是不是都是私有的啊,你可以改成public的试试。如果不行再找原因
回复 使用道具 举报
哥们if后面的分号怎么回事啊
你去掉试试
回复 使用道具 举报
本帖最后由 刘军亭 于 2013-2-17 21:09 编辑

哥们我复制你的代码运行了一把,你的if后边多了好几个“;”,if判断后不管是true还是false都会执行后面的{}里的代码啊,如果类型不对当然就会报错。
回复 使用道具 举报
杨玲 中级黑马 2013-2-17 21:09:40
7#
刘军亭 发表于 2013-2-17 21:05
哥们我复制你的代码运行了一把,你的if后边多了好几个“;”,if判断后不管是true还是false都会执行后面的{ ...

呵呵,我也奇怪呢,为嘛还能进到内部....恩,我试试!
回复 使用道具 举报
杨玲 中级黑马 2013-2-17 21:56:11
8#
呵呵,解决了,谢谢呀,主要是没想到会犯这种初级的错误...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马