通過java反射機制動態調用某方法的總結

來源:互聯網
上載者:User

通過java的反射機制,動態調用某個方法:

如下:

 

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();  
         }
           
        } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.