java反射 动态调用_java反射拼接方法名动态执行方法
近期由于負責(zé)項目的一個模塊,該模塊下有很多分類,每個分類都有一個編碼code,這個值是作為一個參數(shù)攜帶過來的.但是每個code確實對應(yīng)一個方法的.
code的值有很多個,自己又不想做ifelse或者switch判斷于是就狂搜資料,主要讓我發(fā)現(xiàn)利用java的反射機制可以完美的解決這個問題
測試代碼如下:(可以攜帶多個參數(shù)哦)
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();
//第一個參數(shù)寫的是方法名,第二個\第三個\...寫的是方法參數(shù)列表中參數(shù)的類型
Method?method=c.getMethod("ceshi2",?String.class,int.class);
//invoke是執(zhí)行該方法,并攜帶參數(shù)值
String?str2=?(String)?method.invoke(obj,?new?Object[]{"myname",4});
System.out.println(str2);
}
public??String?ceshi(String?str){
//for(int?j=0;j
System.out.println(str);
//}
return?str;
}
public??String?ceshi2(String?str,int?i){
for(int?j=0;j
System.out.println(str+"22222");
}
return?str;
}
}
這樣要是動態(tài)拼接方法名就更簡單了.比如,我的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();
//第一個參數(shù)寫的是方法名,第二個\第三個\...寫的是方法參數(shù)列表中參數(shù)的類型
Method?method=c.getMethod(methodName,?String.class,int.class);
//invoke是執(zhí)行該方法,并攜帶參數(shù)值
String?str2=?(String)?method.invoke(obj,?new?Object[]{"myname",4});
return?str2;
}
當然在實際的需求中還是要根據(jù)項目的需要來自己抽取方法的.希望對大家有幫助.
想更深入了解java反射原理的可以參考:http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html
總結(jié)
以上是生活随笔為你收集整理的java反射 动态调用_java反射拼接方法名动态执行方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php date( w ),PHP Da
- 下一篇: Java PipedInputStrea