現有三個字符串,一個是類名,一個是方法名,一個是方法的參數,三個都是字符串。現需要調用該方法,具體操作如下。
1)、先獲得該類。
Class cname=null; try { cname = Class.forName (classname); } catch (ClassNotFoundException e) { e.PRintStackTrace(); }
Class.forName (classname);該方法的作用是通過反射獲取這個類對象,關于反射請參考http://www.companysz.com/xiufengd/p/4723426.html,或自己百度。
2)、獲取方法
Method[] methodes = cname.getDeclaredMethods();for (int i = 0; i < methodes.length; i++){ method = methodes[i]; if (method.getName().equals(methodName)) { //其他操作 }}
反射后獲得的類對象有一個方法:getDeclaredMethods(),該方法的作用是獲得類或接口聲明的所有方法。然后循環遍歷獲得的方法數據,通過getName方法判斷與要求方法相同的方法,然后獲得這個Method對象。
3)、調用方法
Object result=null;if(arg.equals("")){ result = method.invoke(cname,null);}else if(arg.split(",").length==1){ result = method.invoke(cname, arg);}
Method對象有一個方法為invoke方法,該方法有兩個參數,第一個表示類名,第二個表示參數,該方法的作用就是調用cname這個類的method方法,方法的參數為arg。
目前存在的問題:
因為arg這個參數是一個字符串,所以所有的操作只能在具體方法中再進行分割成參數數組,然后調用多個參數。
新聞熱點
疑難解答