黑马程序员技术交流社区

标题: 大家帮我找找这个代码出错的原因吧,谢谢了! [打印本页]

作者: 杨玲    时间: 2013-2-17 20:32
标题: 大家帮我找找这个代码出错的原因吧,谢谢了!
本帖最后由 杨玲 于 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方法调用都会报错.
作者: 刘军亭    时间: 2013-2-17 20:43
    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:47
刘军亭 发表于 2013-2-17 20:43
for(PropertyDescriptor pd : pds)
                        {
                                //问 ...

呵呵,如果是这样就最好不过了,可是我试过了不行呢.我把前面的
Object obj = clazz.newInstance();
换成了
MyJavaBean obj = new MyJavaBean();
还是不行!
反射当中不存在这个问题的
作者: 刘军亭    时间: 2013-2-17 20:53
哥们,那样的话,你的成员变量是不是都是私有的啊,你可以改成public的试试。如果不行再找原因

作者: 刘军亭    时间: 2013-2-17 20:57
哥们if后面的分号怎么回事啊
你去掉试试

作者: 刘军亭    时间: 2013-2-17 21:05
本帖最后由 刘军亭 于 2013-2-17 21:09 编辑

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

呵呵,我也奇怪呢,为嘛还能进到内部....恩,我试试!
作者: 杨玲    时间: 2013-2-17 21:56
呵呵,解决了,谢谢呀,主要是没想到会犯这种初级的错误...




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