利用java反射機制實現List >轉化為List


最近在用mybatis做項目,遇到將date格式化顯示到easyui的問題,需要將List<Map<String, Object>>轉化為List<JavaBean>,研究好久,終於在網上找到了一個方法:

核心方法如下:

[java] view plain  copy
 
  1. /** 
  2.      * 根據List<Map<String, Object>>數據轉換為JavaBean數據 
  3.      * @param datas 
  4.      * @param beanClass 
  5.      * @return 
  6.      * @throws CommonException 
  7.      */  
  8.     public List<T> ListMap2JavaBean(List<Map<String, Object>> datas, Class<T> beanClass) throws CommonException  {  
  9.         // 返回數據集合  
  10.         List<T> list = null;  
  11.         // 對象字段名稱  
  12.         String fieldname = "";  
  13.         // 對象方法名稱  
  14.         String methodname = "";  
  15.         // 對象方法需要賦的值  
  16.         Object methodsetvalue = "";  
  17.         try {  
  18.             list = new ArrayList<T>();  
  19.             // 得到對象所有字段  
  20.             Field fields[] = beanClass.getDeclaredFields();  
  21.             // 遍歷數據  
  22.             for (Map<String, Object> mapdata : datas) {  
  23.                 // 創建一個泛型類型實例  
  24.                 T t = beanClass.newInstance();  
  25.                 // 遍歷所有字段,對應配置好的字段並賦值  
  26.                 for (Field field : fields) {  
  27.                     // 獲取注解配置  
  28.                     JavaBean javaBean = field.getAnnotation(JavaBean.class);  
  29.                     if(null != javaBean) {  // 有注解配置,下一步操作  
  30.                         // 全部轉化為大寫  
  31.                         String dbfieldname = javaBean.dbfieldname().toUpperCase();  
  32.                         // 獲取字段名稱  
  33.                         fieldname = field.getName();  
  34.                         // 拼接set方法  
  35.                         methodname = "set" + StrUtil.capitalize(fieldname);  
  36.                         // 獲取data里的對應值  
  37.                         methodsetvalue = mapdata.get(dbfieldname);  
  38.                         // 賦值給字段  
  39.                         Method m = beanClass.getDeclaredMethod(methodname, field.getType());  
  40.                         m.invoke(t, methodsetvalue);  
  41.                     }  
  42.                 }  
  43.                 // 存入返回列表  
  44.                 list.add(t);  
  45.             }  
  46.         } catch (InstantiationException e) {  
  47.             throw new CommonException(e, "創建beanClass實例異常");  
  48.         } catch (IllegalAccessException e) {  
  49.             throw new CommonException(e, "創建beanClass實例異常");  
  50.         } catch (SecurityException e) {  
  51.             throw new CommonException(e, "獲取[" + fieldname + "] getter setter 方法異常");  
  52.         } catch (NoSuchMethodException e) {  
  53.             throw new CommonException(e, "獲取[" + fieldname + "] getter setter 方法異常");  
  54.         } catch (IllegalArgumentException e) {  
  55.             throw new CommonException(e, "[" + methodname + "] 方法賦值異常");  
  56.         } catch (InvocationTargetException e) {  
  57.             throw new CommonException(e, "[" + methodname + "] 方法賦值異常");  
  58.         }  
  59.         // 返回  
  60.         return list;  
  61.     } 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。