<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 40, 文章 - 0, 評論 - 20, 引用 - 0
    數據加載中……

    執行過程中動態執行方法

    在編程中可能回碰到一些到實際運行時才指定要調用的方法的需要,最典型的是Struct的DispatchAction類,
    它能根據用戶頁面請求參數的不同來調用不同的方法來處理用戶請求。我下面寫了一個簡單的例子來簡單演示其
    實現方法:

    package learn;
    import java.lang.NoSuchMethodException;
    import java.lang.reflect.Method;
    import java.util.Date;

    public class TestMethod{
        protected Class clazz = this.getClass();
        protected Class[] no_parameter = {};  //方法無參數
        protected Class[] string_parameter = {String.class}; //以String 為參數
        protected Class[] int_parameter = {int.class};  //以int為參數
        protected Class[] multi_parameter = {String.class,Date.class}; //多個參數,第一個為String,第二二個為Date   
       
        public void method1(){
          System.out.println("method1");
        }
       
        public void method2(String str){
          System.out.println("method2=>"+str);
        }
       
        public void method3(int i){
          System.out.println("method2=>"+i);
        }
       
        public void method4(String str,Date date){
          System.out.println("method4=>"+str+"==="+date.toLocaleString());
        }
       
        public void execute(String methodName,int type,java.util.List list) throws Exception{
          try {
            Method  m = getMethod(methodName,type);
            int size = (list != null )? list.size():0;
            Object o [] = new Object[size];
            for( int i =0 ; i< size ; i++ )
              o[i] = list.get(i);  //準備參數
            m.invoke(this,o);
          }
          catch (Exception ex) {
            ex.printStackTrace();
            throw new Exception(ex.getMessage());
          }
        }
       
        private Method getMethod(String name,int type)throws NoSuchMethodException{
            Method m = null;
            switch(type){
              case 1:
                m = clazz.getMethod(name,no_parameter);
                break;
              case 2:
                m = clazz.getMethod(name,string_parameter);
                break;
              case 3:
                m = clazz.getMethod(name,int_parameter);
                break;
              case 4:
                m = clazz.getMethod(name,multi_parameter);
                break;
              default:
                m = clazz.getMethod(name,no_parameter);
            }
            return m;
        }
       
        public static void main(String [] argv){
          TestMethod testMethod = new TestMethod();
          try{
            java.util.List list = new java.util.ArrayList();
            testMethod.execute("method1", 1, list);
            list.add("
    http://www.tkk7.com/minmoon");
            testMethod.execute("method2", 2, list);
            list.clear();
            list.add("
    mailTo:xiaoliang@aspire-tech.com");
            list.add(new Date());
            testMethod.execute("method4",4,list);
          }
          catch(Exception e){
            e.printStackTrace();
          }
        }
    }

    其中幾個關鍵的地方說明一下:
      clazz.getMethod(name,multi_parameter);  其中multi_parameter是要根據實際方法的參數來定義的。
      m.invoke(this,o);   o是要傳入方法的參數列表。

    posted on 2005-11-23 00:18 月亮 閱讀(486) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产免费高清69式视频在线观看| 国产精品99久久免费观看| 精品在线免费视频| 一级特级aaaa毛片免费观看| 免费羞羞视频网站| 亚洲国产成人AV网站| 免费国产午夜高清在线视频| 亚洲人成无码久久电影网站| 亚洲高清视频在线观看| 亚洲乱码在线观看| 最近免费中文字幕大全视频| 亚洲一区二区三区国产精华液| 国产线视频精品免费观看视频| 成年女人毛片免费播放视频m| 亚洲成a人片在线观看精品| 久久精品成人免费观看97| 红杏亚洲影院一区二区三区| 999zyz**站免费毛片| 亚洲成色www久久网站夜月| 最近中文字幕国语免费完整| www国产亚洲精品久久久| 一级大黄美女免费播放| 亚洲人成图片小说网站| 91短视频免费在线观看| 亚洲人成网77777亚洲色| 久久精品无码专区免费东京热| 亚洲三级在线播放| 国产精品视频白浆免费视频| 亚洲黄色在线视频| 免费无码又爽又高潮视频| xxxxx做受大片在线观看免费| 亚洲av无码乱码国产精品fc2| 91黑丝国产线观看免费| 毛片亚洲AV无码精品国产午夜| 亚洲日韩中文字幕在线播放| 永久在线观看www免费视频| 女bbbbxxxx另类亚洲| 亚洲成年轻人电影网站www| 在线播放免费人成视频在线观看| 亚洲毛片基地4455ww| 亚洲国产a级视频|