近期由于負(fù)責(zé)項(xiàng)目的一個(gè)模塊,該模塊下有很多分類,每個(gè)分類都有一個(gè)編碼code,這個(gè)值是作為一個(gè)參數(shù)攜帶過來的。但是每個(gè)code確實(shí)對(duì)應(yīng)一個(gè)方法的。
code的值有很多個(gè),自己又不想做ifelse或者switch判斷于是就狂搜資料,主要讓我發(fā)現(xiàn)利用java的反射機(jī)制可以完美的解決這個(gè)問題
測(cè)試代碼如下:(可以攜帶多個(gè)參數(shù)哦)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
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(); //第一個(gè)參數(shù)寫的是方法名,第二個(gè)\第三個(gè)\...寫的是方法參數(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<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; } } |
這樣要是動(dòng)態(tài)拼接方法名就更簡(jiǎn)單了.比如,我的code值有100個(gè),分別為1~100,我code方法分別為ReturnCodeList();這個(gè)時(shí)候我們把上面的方法抽取出來,返回我們需要的值就行了比如:
1
2
3
4
5
6
7
8
9
10
|
public String fanShe(String methodName,String className) throws ClassNotFoundException, SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ //里面寫自己的類名及路徑 Class<?> c = Class.forName(className); Object obj = c.newInstance(); //第一個(gè)參數(shù)寫的是方法名,第二個(gè)\第三個(gè)\...寫的是方法參數(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; } |
當(dāng)然在實(shí)際的需求中還是要根據(jù)項(xiàng)目的需要來自己抽取方法的.希望對(duì)大家有幫助。
以上這篇java反射拼接方法名動(dòng)態(tài)執(zhí)行方法實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。