다음과 같이 :
public Object InvokEmethod (String className, String MethodName, Object [] args)는 예외 {class OwnerClass = class.forname (className); 오브젝트 소유자 = olderclass.newinstance (); 클래스 [] argsclass = new Class [args.length]; for (int i = 0, j = args.length; i <j; i ++) {argsclass [i] = args [i] .getclass (); } 메소드 메소드 = olderclass.getMethod (MethodName, ArgsClass); return method.invoke (소유자, args);}그러나 실제 애플리케이션에서는 실제 매개 변수와 호출되는 방법의 공식 매개 변수가 완전히 일관되지 않을 수있는 상황도 만나게됩니다.
예를 들어, struts1.x의 메소드가 호출되면 httpservletresponse 유형의 매개 변수가 있습니다.
Tomcat에서 요청 객체의 인스턴스는 실제로 : org.apache.catalina.connector.responsefacade입니다.
인터페이스를 구현합니다 : javax.servlet.http.httpservletresponse;
웹 컨테이너의 요청 객체를 매개 변수로 직접 처리하고 위의 코드 스 니펫으로 전달하면 문제가 발생합니다. 현재 우리의 취급 방법은 다음과 같습니다. 실제로이 방법은 다음과 같습니다.
Public ActionForward Query (ActionMapping Mapping, ActionForm 양식,
httpservletrequest 요청, httpservletresponse 응답)
응답은 일반적으로 네 번째에 위치하므로 위의 코드를 수정하겠습니다.
묶음
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 반사 메커니즘을 통해 특정 방법을 동적으로 호출하는 위의 요약 (권장)은 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.