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

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

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

    隨筆 - 40, 文章 - 0, 評論 - 20, 引用 - 0
    數(shù)據(jù)加載中……

    執(zhí)行過程中動(dòng)態(tài)執(zhí)行方法

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

    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 = {};  //方法無參數(shù)
        protected Class[] string_parameter = {String.class}; //以String 為參數(shù)
        protected Class[] int_parameter = {int.class};  //以int為參數(shù)
        protected Class[] multi_parameter = {String.class,Date.class}; //多個(gè)參數(shù),第一個(gè)為String,第二二個(gè)為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);  //準(zhǔn)備參數(shù)
            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();
          }
        }
    }

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

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产一级做a爱免费视频| 国产精品青草视频免费播放| 午夜爽爽爽男女免费观看影院| 成人免费视频一区二区三区| 亚洲免费综合色在线视频| 在线播放免费播放av片| 国产成人无码免费视频97| 亚洲国产日产无码精品| 久久亚洲中文无码咪咪爱| 人人爽人人爽人人片av免费| 午夜毛片不卡高清免费| 国产精品亚洲午夜一区二区三区 | 免费看a级黄色片| 成人亚洲综合天堂| 久久精品国产亚洲综合色| 激情婷婷成人亚洲综合| 毛片免费观看视频| 亚洲国产人成在线观看| 动漫黄网站免费永久在线观看| 亚洲精品在线观看视频| 91精品免费高清在线| 久久久久亚洲Av片无码v| 国产午夜无码精品免费看动漫| 国产精品视频永久免费播放| 亚洲另类春色国产精品| 国产大片免费网站不卡美女| 亚洲熟妇色自偷自拍另类| 99热这里只有精品6免费| 亚洲乱码日产精品BD在线观看| 日本最新免费网站| 亚洲一级免费视频| 热99re久久精品精品免费| 亚洲成av人片在www鸭子| 国产男女性潮高清免费网站| 高潮内射免费看片| 香蕉免费一级视频在线观看| 久久精品国产亚洲av麻豆色欲| 日本特黄a级高清免费大片| 岛国岛国免费V片在线观看| 亚洲人成网网址在线看| 亚洲七七久久精品中文国产|