网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

简化繁琐的赋值——反射在Jdbc和Struts中的应用

http://www.diybl.com/ 2007-2-6  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】

p;  System.out.println("no such type!");







             return null;







      }







        }







       catch(Exception e)







        {







               e.printStackTrace();







               return null;







        }







}







果然是从stmt中取得对应位置的值。注意:读者可以看到,在该方法中列出的几种类型显然是不够的,读者可以自己加上其他的类型的取值。







最后,我们来看ValueSetter类的valueToBean方法。我们可以分析出,该方法的功能是将从数据源stmt中取得的值赋给Javabean对象o对应的字段。







ValueToBean的实现如下:







public static void valueToBean(String type,String methodName,Object o,String value)

  {







    try







    {







                     if(Tools.isBlank(s)&&!(type.equals(“String”))) return;







//首先还是取得o对象对应的Class对象。







      Class c=o.getClass();







 







//对于下面的两个语句,我们也作了标记,在后面陈述。







      Class[] types=Tools.getTypes(type);              语句二







      Object[] args=Tools.getArgs(type,value);          语句三







 







//取得Javabean的方法对象。







      Method m=c.getMethod(methodName,types);







 







//调用该方法。







      m.invoke(o,args);







    }







    catch(Exception e)







    {







      e.printStackTrace();







    }







   







  }







 







我们来看语句二:







显然是用来构造参数类型的Class数组。因为在Javabean中setXXX方法只有一个参数,该参数的类型名为type,所以Tools.getTypes(type)只有一个参数类型type需要构造,getTypes方法的实现如下:







public static Class[] getTypes(String type)







{







       if(type.equals("java.lang.String"))







      {







        return new Class[]{String.class};







      }







      else if(type.equals("int"))







      {







        return new Class[]{Integer.TYPE};







      }







      else if(type.equals("long"))







      {







        return new Class[]{Long.TYPE};







      }







      else if(type.equals("float"))







      {







        return new Class[]{Float.TYPE};







      }







      else







      {







             System.out.println("no such type!");







             return null;







      }







}







在这个方法里头,同样,没有列举出来的类型读者可以补充。







语句三是根据invoke方法的需要,构造输入参数值的Object类型的数组,getArgs的实现如下:







public static Object[] getArgs(String type,String value)







{







       if(type.equals("java.lang.String"))







      {







        return new Object[]{new String(value)};







      }







      else if(type.equals("int"))







      {







        return new Object[]{new Integer(Integer.parseInt(value))};







      }

文章整理:DIY部落 http://www.diybl.com (本站)   【点击打包该文章】
如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言

 

最新新闻