花開有時

          花開有時,花落有時,來有時,去有時。不撕扯,只關切;不紀念,只牽掛;不感動,只明白;不尋找,只記得。
          隨筆 - 24, 文章 - 0, 評論 - 54, 引用 - 0
          數據加載中……

          java Method類試用

                  背景:在項目中有一堆javabean,要用在界面上畫一堆tableview,要對這一堆tableview進行排序,因此要寫一堆sorter類(假如為每個tableview都寫一個的話),工作量比較大。
                  思考:其實這些sorter類都是差不多的,只是調用的javabean不同,方法名稱不同,實現的原理,沒有什么不同,那么該如何使用一個sorter類就可對所有的tableview進行排序呢?
                  思考結果:也許可以用Class類與Method類,也就是什么reflect機制。
                  困難:從來沒用過reflect機制。

                 沒有過,沒關系。JDK5.0文檔與google是我最好的老師。
                 下面就是我的成果了:
                 第一步,先建個javabean:
          package test;

          public class Model {

              
          private String id;
              
          private String name;
              
          private String description;
              
              
          public Model() {
                  id 
          = "id";
                  name 
          = "name";
                  description 
          = "description";
              }


              
          public String getId() {
                  
          return id;
              }


              
          public void setId(String id) {
                  
          this.id = id;
              }


              
          public String getName() {
                  
          return name;
              }


              
          public void setName(String name) {
                  
          this.name = name;
              }


              
          public String getDescription() {
                  
          return description;
              }


              
          public void setDescription(String description) {
                  
          this.description = description;
              }


          }


                  第二步:
          package test;

          import java.lang.reflect.InvocationTargetException;
          import java.lang.reflect.Method;

          public class TestMethodReflect {

              
          public static final String ID = "Id";
              
          public static final String NAME = "Name";
              
          public static final String DESCRIPTION = "Description";

              
          //方法名集合
              public static final String[] ALL = { ID, NAME, DESCRIPTION };

              
          //這是測試數據
              public static final String[] MODELDATA = "1""Gavin",
                      
          "this is model's test data" }
          ;

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  
          try {
                      
          //獲得Model類
                      Class model = Class.forName("test.Model");
                      
          //獲得Model類的實例
                      Object object = model.newInstance();
                      
          for (int i = 0; i < ALL.length; i++{
                          
          //獲得Model類的set方法,參數為String類型
                          Method setMethod = model.getMethod("set" + ALL[i], String.class);
                          
          //調用set方法
                          setMethod.invoke(object, MODELDATA[i]);

                          
          //獲得Model類的get方法,無參數
                          Method getMethod = model.getMethod("get" + ALL[i], null);
                          
          //調用get方法,并輸出數據
                          System.out.println(getMethod.invoke(object, null));
                      }

                  }
           catch (ClassNotFoundException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
           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();
                  }
           catch (InstantiationException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }


              }


          }


                  ok,大功告成!
                  成功后的思考:我只要在一個sorter類里添加一個classname的參數,添加一個methodName的參數(類型為String[]),用一個for循環就有可能用一個sorter類為每個tableview加入排序的功能。

          posted on 2007-12-23 14:07 花開有時 閱讀(5887) 評論(4)  編輯  收藏 所屬分類: java

          評論

          # re: java Method類試用  回復  更多評論   

          hao
          2009-02-24 15:21 | atomy

          # re: java Method類試用  回復  更多評論   

          頂一下:)
          2009-07-01 17:38 | jiaxun

          # re: java Method類試用  回復  更多評論   

          只是利用反射做這種工作會有點慢
          2009-08-23 00:49 | 王兵

          # re: java Method類試用  回復  更多評論   

          我最近也遇到類似問題
          我的解決辦法是用泛型解決和javabean的內省機制可以
          做出一個通用類
          不管傳什么類進來,返回這個類的LIST相關信息:)
          可以試試
          2012-07-16 16:48 | 土撥鼠
          主站蜘蛛池模板: 安义县| 外汇| 宁河县| 盘锦市| 青神县| 临夏县| 城市| 翁牛特旗| 郑州市| 松阳县| 林口县| 遂溪县| 剑河县| 民丰县| 丹江口市| 如东县| 黔东| 师宗县| 秀山| 温泉县| 衡阳县| 贡山| 达孜县| 顺平县| 桓台县| 宣汉县| 区。| 如东县| 安图县| 南昌县| 潢川县| 江西省| 烟台市| 桐城市| 南陵县| 永安市| 洪洞县| 日土县| 贵定县| 襄城县| 金坛市|