通過java反射機制動態調用某方法的總結(推薦)_java

來源:互聯網
上載者:User

如下:

public Object invokeMethod(String className, String methodName,Object[] args) throws Exception{Class ownerClass = Class.forName(className);Object owner = ownerClass.newInstance();      Class[] argsClass = new Class[args.length];        for (int i = 0, j = args.length; i < j; i++) {            argsClass[i] = args[i].getClass();           }        Method method = ownerClass.getMethod(methodName, argsClass);  return method.invoke(owner, args);}

但是,我們在實際應用中,還會碰到一種情況,傳入的實參和要被調用的方法的形參可能不完全一致:

比如,在struts1.x中的某個方法被調用時候,它會有HttpServletResponse類型的參數,

我們在tomcat中,request對象的執行個體其實是:org.apache.catalina.connector.ResponseFacade

它實現了介面:javax.servlet.http.HttpServletResponse;

如果我們直接把web容器中的request對象當做一個參數,傳入上面的程式碼片段的話, 就有問題,這時,我們的處理辦法是這樣的,在action中,方法一般形如:

public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)

response一般位於第四個,那麼我們修改以上的代碼:


for (int i = 0, j = args.length; i < j; i++) {             argsClass[i] = args[i].getClass();           }  

改為:

for (int i = 0, j = args.length; i < j; i++) {       if(i == 3){      argsClass[i] = HttpServletResponse.class;       }     else{      argsClass[i] = args[i].getClass();       }          } 

以上這篇通過java反射機制動態調用某方法的總結(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.