花開(kāi)有時(shí)

          花開(kāi)有時(shí),花落有時(shí),來(lái)有時(shí),去有時(shí)。不撕扯,只關(guān)切;不紀(jì)念,只牽掛;不感動(dòng),只明白;不尋找,只記得。
          隨筆 - 24, 文章 - 0, 評(píng)論 - 54, 引用 - 0
          數(shù)據(jù)加載中……

          java Method類試用

                  背景:在項(xiàng)目中有一堆javabean,要用在界面上畫(huà)一堆tableview,要對(duì)這一堆tableview進(jìn)行排序,因此要寫(xiě)一堆sorter類(假如為每個(gè)tableview都寫(xiě)一個(gè)的話),工作量比較大。
                  思考:其實(shí)這些sorter類都是差不多的,只是調(diào)用的javabean不同,方法名稱不同,實(shí)現(xiàn)的原理,沒(méi)有什么不同,那么該如何使用一個(gè)sorter類就可對(duì)所有的tableview進(jìn)行排序呢?
                  思考結(jié)果:也許可以用Class類與Method類,也就是什么reflect機(jī)制。
                  困難:從來(lái)沒(méi)用過(guò)reflect機(jī)制。

                 沒(méi)有過(guò),沒(méi)關(guān)系。JDK5.0文檔與google是我最好的老師。
                 下面就是我的成果了:
                 第一步,先建個(gè)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 };

              
          //這是測(cè)試數(shù)據(jù)
              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類的實(shí)例
                      Object object = model.newInstance();
                      
          for (int i = 0; i < ALL.length; i++{
                          
          //獲得Model類的set方法,參數(shù)為String類型
                          Method setMethod = model.getMethod("set" + ALL[i], String.class);
                          
          //調(diào)用set方法
                          setMethod.invoke(object, MODELDATA[i]);

                          
          //獲得Model類的get方法,無(wú)參數(shù)
                          Method getMethod = model.getMethod("get" + ALL[i], null);
                          
          //調(diào)用get方法,并輸出數(shù)據(jù)
                          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,大功告成!
                  成功后的思考:我只要在一個(gè)sorter類里添加一個(gè)classname的參數(shù),添加一個(gè)methodName的參數(shù)(類型為String[]),用一個(gè)for循環(huán)就有可能用一個(gè)sorter類為每個(gè)tableview加入排序的功能。

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

          評(píng)論

          # re: java Method類試用  回復(fù)  更多評(píng)論   

          hao
          2009-02-24 15:21 | atomy

          # re: java Method類試用  回復(fù)  更多評(píng)論   

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

          # re: java Method類試用  回復(fù)  更多評(píng)論   

          只是利用反射做這種工作會(huì)有點(diǎn)慢
          2009-08-23 00:49 | 王兵

          # re: java Method類試用  回復(fù)  更多評(píng)論   

          我最近也遇到類似問(wèn)題
          我的解決辦法是用泛型解決和javabean的內(nèi)省機(jī)制可以
          做出一個(gè)通用類
          不管傳什么類進(jìn)來(lái),返回這個(gè)類的LIST相關(guān)信息:)
          可以試試
          2012-07-16 16:48 | 土撥鼠
          主站蜘蛛池模板: 吉林省| 手游| 河池市| 太湖县| 南投县| 东阳市| 湖州市| 靖江市| 新沂市| 江津市| 汶川县| 茂名市| 黄山市| 汉阴县| 义马市| 朔州市| 噶尔县| 岱山县| 临安市| 汉阴县| 英山县| 金门县| 临高县| 阿荣旗| 长寿区| 秦安县| 榆树市| 利辛县| 兴山县| 滕州市| 桂林市| 黔江区| 汝城县| 江津市| 全州县| 华容县| 泰和县| 赞皇县| 舟曲县| 重庆市| 化州市|