1. 程式人生 > >Java動態呼叫方法

Java動態呼叫方法

  1. public void function(String str)  
  2. {  
  3.       / /根據 str的值 呼叫相應的方法  
  4. }  
  5. public void test()  
  6. {  
  7.      / /code  
  8. }  


如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程式碼  收藏程式碼
  1. public class MovingInvokeTest  
  2. {  
  3.     private static MovingInvokeTest movingInvokeTest = new MovingInvokeTest();    / /建立MovingInvokeTest物件  
  4.     public void do_test(String str,int i) throws Exception                                                 / /根據str字串呼叫方法,變數i只是為了判斷  
  5.                                                                                                                                           / /呼叫有幾個引數的方法  
  6.     {  
  7.       if(i == 0)                   / /呼叫沒有引數的方法  
  8.        movingInvokeTest.getClass().getMethod(str, new Class[]{}).invoke(movingInvokeTest, new Object[]{});  
  9.       else if(i == 1)            / /呼叫有一個引數的方法,引數為String型別的s  
  10.        movingInvokeTest.getClass().getMethod(str, new Class[]{String.class}).invoke(movingInvokeTest, new Object[]{"s"});  
  11.       else if(i == 2)           / / /呼叫有兩個引數的方法 引數分別為String型別的qw和int型的1  
  12.        movingInvokeTest.getClass().getMethod(str, new Class[]{String.class,int.class}).invoke(movingInvokeTest, new Object[]{"qw",1});  
  13.     }  
  14.   /* 
  15.    * 下面是3個方法 
  16.    */  
  17.     public void speak()  
  18.   {  
  19.          System.out.println("呼叫的沒有引數的方法");  
  20.   }  
  21.     public void speak(String s)  
  22.     {  
  23.        System.out.println("呼叫有一個引數的方法,引數為:"+s);  
  24.     }  
  25.     public void speak(String s,int i)  
  26.     {  
  27.         System.out.println("呼叫有兩個引數的方法,引數為,引數為:"+s+"和" +i);  
  28.     }  
  29.     / /main函式  
  30.     public static void main(String[] args) throws Exception  
  31.     {     
  32.                movingInvokeTest.do_test("speak",1);  
  33.     }  
  34. }