public void function(String str)
{
/ /根據 str的值 調用相應的方法
}
public void test()
{
/ /code
}
如str的值爲test,就調用test方法
主要用到java反射機制,Class和Method這些類。
動態調用的方法:a.getClass().getMethod(str, new Class[]{}).invoke(a, new Object[]{})
其中,a爲類的對象,str爲要被調用的方法名
1、a.getClass()得到a.class 對象
2、getMethod(str, new Class[]{})得到a對象中名爲str的不帶參數的方法。。。
如果str方法帶參數如str(String s, int i),就要這樣寫getMethod(str, new Class[]{String.class,int.class})
3、invoke(a,new Object[]{})調用方法,第一個參數是要調用這個方法的對象,如果方法是static的,這個參數可以爲null
如果調用有參數的方法str(String s, int i),應該這樣寫invoke(a,new Object[]{"jimmy", 1})
下面是代碼,幫助理解
public class MovingInvokeTest
{
private static MovingInvokeTest movingInvokeTest = new MovingInvokeTest(); / /創建MovingInvokeTest對象
public void do_test(String str,int i) throws Exception / /根據str字符串調用方法,變量i只是爲了判斷
/ /調用有幾個參數的方法
{
if(i == 0) / /調用沒有參數的方法
movingInvokeTest.getClass().getMethod(str, new Class[]{}).invoke(movingInvokeTest, new Object[]{});
else if(i == 1) / /調用有一個參數的方法,參數爲String類型的s
movingInvokeTest.getClass().getMethod(str, new Class[]{String.class}).invoke(movingInvokeTest, new Object[]{"s"});
else if(i == 2) / / /調用有兩個參數的方法 參數分別爲String類型的qw和int型的1
movingInvokeTest.getClass().getMethod(str, new Class[]{String.class,int.class}).invoke(movingInvokeTest, new Object[]{"qw",1});
}
/*
* 下面是3個方法
*/
public void speak()
{
System.out.println("調用的沒有參數的方法");
}
public void speak(String s)
{
System.out.println("調用有一個參數的方法,參數爲:"+s);
}
public void speak(String s,int i)
{
System.out.println("調用有兩個參數的方法,參數爲,參數爲:"+s+"和" +i);
}
/ /main函數
public static void main(String[] args) throws Exception
{
movingInvokeTest.do_test("speak",1);
}
}