LinuxChan的程序園地

          前端后端Web開(kāi)發(fā)技術(shù)

           

          兩個(gè)很簡(jiǎn)單的java反射應(yīng)用

          1,是否對(duì)java Web中無(wú)處不在的Vo ,Dto比較無(wú)語(yǔ)呢?想要看看其中的數(shù)據(jù),就必需不厭其煩的調(diào)用getXXX();所以寫(xiě)了個(gè)BaseVo 只要繼承它,
          然后直接調(diào)用它的toString()方法,即可將里面的值都打印出來(lái)
              public String toString() {
                  Field[] fields 
          = this.getClass().getDeclaredFields();
                  StringBuffer result 
          = new StringBuffer();
                  
          for (Field field : fields) {
                      
          // System.out.prIntegerln(field.getName());
                      String fieldName = field.getName();
                      String methodName 
          = "get" + fieldName.substring(01).toUpperCase()
                              
          + fieldName.substring(1);
                      result.append(fieldName 
          + ":");
                      Method method 
          = null;
                      Object obj 
          = null;
                      
          try {
                          method 
          = UserVo.class.getMethod(methodName);
                          obj 
          = method.invoke(thisnull);
                      }
           catch (SecurityException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
           catch (NoSuchMethodException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
           catch (IllegalArgumentException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
           catch (IllegalAccessException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }
           catch (InvocationTargetException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }

                      
          if (obj != null{
                          result.append(obj);
                      }
           else
                          result.append(
          "");
                      result.append(
          "\n");
                  }

                  
          return result.toString();
              }


          2,2個(gè)同類(lèi)型的Vo/Dto,需要將一個(gè)中的值填充到另外一個(gè)里去。正常方法需要set/get 如果字段一多,簡(jiǎn)直是噩夢(mèng)。而利用反射,可以輕易實(shí)現(xiàn)。
           1    public static void parseVO(Object obj, Object target)
           2            throws Exception, NoSuchMethodException {
           3        for (Field field : obj.getClass().getDeclaredFields()) {
           4            Method getMethod = obj.getClass().getMethod(
           5                    "get" + field.getName().substring(01).toUpperCase()
           6                            + field.getName().substring(1));
           7            Object result = getMethod.invoke(obj);
           8            if (result != null{
           9                Method setMethod = target.getClass().getMethod(
          10                        "set" + field.getName().substring(01).toUpperCase()
          11                                + field.getName().substring(1), result.getClass());
          12                setMethod.invoke(target, result);
          13            }

          14        }

          15    }

          posted on 2009-01-23 12:04 LinuxChan 閱讀(501) 評(píng)論(2)  編輯  收藏

          評(píng)論

          # re: 兩個(gè)很簡(jiǎn)單的java反射應(yīng)用 2009-01-30 09:58 sorcerer

          反射的性能問(wèn)題需要斟酌一下.  回復(fù)  更多評(píng)論   

          # re: 兩個(gè)很簡(jiǎn)單的java反射應(yīng)用 2009-02-13 14:19 Rory

          有時(shí)候比較簡(jiǎn)單的也的確沒(méi)必要用反射,畢竟性能方面的考慮  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 沧州市| 梅河口市| 长顺县| 巫山县| 长丰县| 临潭县| 内江市| 东乡| 武穴市| 宜君县| 连城县| 平舆县| 和政县| 镇远县| 曲麻莱县| 吕梁市| 汶上县| 宝清县| 金乡县| 大田县| 武强县| 九寨沟县| 大埔区| 威远县| 金山区| 博客| 张掖市| 乐清市| 泸西县| 杭锦后旗| 台湾省| 蚌埠市| 堆龙德庆县| 夏河县| 深泽县| 含山县| 阜宁县| 利津县| 永康市| 武穴市| 星子县|