java利用反射動態呼叫方法,類似python的eval和exec函式
阿新 • • 發佈:2019-01-06
場景:
類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})