1. 程式人生 > >java利用反射動態呼叫方法,類似python的eval和exec函式

java利用反射動態呼叫方法,類似python的eval和exec函式

場景:

類C中存有方法A()和B(),String str存有方法的名字可能是A,也可能是B,要求能通過str的不同,呼叫相應名字的函式。

實現:

主要用到java反射機制,動態呼叫的方法:
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})