Java動態呼叫方法
阿新 • • 發佈:2019-01-01
- 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})
下面是程式碼,幫助理解
Java程式碼
-
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);
- }
- }