1. 程式人生 > >java反射拼接方法名動態執行方法

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;
	 }

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