public void function(String str) { //根據 str的值 調用相應的方法 } public void test() { //code }
如str的值爲test,就調用test方法。主要用到java反射機制,Class和Method這些類。java
動態調用的方法:a.getClass().getMethod(str, new Class[]{}).invoke(a, new Object[]{})
code
其中,a
爲類的對象,str
爲要被調用的方法名對象
a.getClass()
獲得a.class
對象字符串
getMethod(str, new Class[]{})
獲得a對象中名爲str的不帶參數的方法。若是str方法帶參數如str(String s, int i)
,就要這樣寫getMethod(str, new Class[]{String.class,int.class})
get
invoke(a,new Object[]{})
調用方法,第一個參數是要調用這個方法的對象,若是方法是static
的,這個參數能夠爲null。若是調用有參數的方法str(String s, int i)
,應該這樣寫invoke(a,new Object[]{"jimmy", 1})
io
下面是代碼,幫助理解function
public class MovingInvokeTest { private static MovingInvokeTest movingInvokeTest = new MovingInvokeTest(); // 建立MovingInvokeTest對象 /* * 根據str字符串調用方法,變量i只是爲了判斷,調用有幾個參數的方法 */ public void do_test(String str, int i) throws Exception { 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 }); } } 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); } public static void main(String[] args) throws Exception { movingInvokeTest.do_test("speak", 1); } }