자바 반사 메커니즘을 통해 어떤 방법을 동적으로 호출하는 총결(추천)

다음과 같습니다.

	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;
만약에 우리가 웹 용기에 있는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();  
     }
      
    } 

이상의 자바 반사 메커니즘을 통해 어떤 방법을 동적으로 호출하는 총결(추천)은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기