java反射拼接方法名動態執行方法


近期由於負責項目的一個模塊,該模塊下有很多分類,每個分類都有一個編碼code,這個值是作為一個參數攜帶過來的.但是每個code確實對應一個方法的.

code的值有很多個,自己又不想做ifelse或者switch判斷於是就狂搜資料,主要讓我發現利用java的反射機制可以完美的解決這個問題

測試代碼如下:(可以攜帶多個參數哦)

package com.escs.xmlutils;

import java.lang.reflect.Method;

public class Test {

    public String ceshi(){
        System.out.println("1111111111111");
        return "success";
    }
     public static void main(String[] args) throws Exception { 
             //里面寫自己的類名及路徑
            Class<?> c = Class.forName("com.escs.xmlutils.Test");
            Object obj = c.newInstance();
            //第一個參數寫的是方法名,第二個\第三個\...寫的是方法參數列表中參數的類型
            Method method=c.getMethod("ceshi2", String.class,int.class);
            //invoke是執行該方法,並攜帶參數值
            String str2= (String) method.invoke(obj, new Object[]{"myname",4});
           System.out.println(str2);
         }      
     public  String ceshi(String str){
         //for(int j=0;j<Integer.valueOf(i);j++){
             System.out.println(str);
         //}
        
         return str;
     }
         
     public  String ceshi2(String str,int i){
         for(int j=0;j<i;j++){
             System.out.println(str+"22222");
         }
        
         return str;
     }
       
    }   

這樣要是動態拼接方法名就更簡單了.比如,我的code值有100個,分別為1~100,我code方法分別為ReturnCodeList();這個時候我們把上面的方法抽取出來,返回我們需要的值就行了比如:

 public String fanShe(String methodName,String className) throws ClassNotFoundException, SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        //里面寫自己的類名及路徑
            Class<?> c = Class.forName(className);
            Object obj = c.newInstance();
            //第一個參數寫的是方法名,第二個\第三個\...寫的是方法參數列表中參數的類型
            Method method=c.getMethod(methodName, String.class,int.class);
            //invoke是執行該方法,並攜帶參數值
            String str2= (String) method.invoke(obj, new Object[]{"myname",4});
            return str2;
     }

當然在實際的需求中還是要根據項目的需要來自己抽取方法的.希望對大家有幫助.

想更深入了解java反射原理的可以參考:http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM