wie folgt:
öffentliches Objekt invoKemethod (String className, String methodName, Object [] args) löst eine Ausnahme aus {class OwnerClass = class.forname (className); Class [] argsClass = new class [args.length]; für (int i = 0, j = args.length; i <j; i ++) {argsClass [i] = args [i] .getClass (); } Method method = orientalClass.getMethod (methodName, argsClass); return methode.invoke (Eigentümer, args);}In unserer tatsächlichen Anwendung werden wir jedoch auch auf eine Situation stoßen, in der die eingehenden tatsächlichen Parameter und die formalen Parameter der aufgerufenen Methode möglicherweise nicht vollständig konsistent sind:
Wenn beispielsweise eine Methode in Struts1.x aufgerufen wird, enthält sie Parameter vom Typ httpServletResponse.
In Tomcat lautet die Instanz des Anforderungsobjekts tatsächlich: org.apache.catalina.connector.responsefacade
Es implementiert die Schnittstelle: javax.servlet.http.httpServletResponse;
Wenn wir das Anforderungsobjekt direkt im Webcontainer als Parameter behandeln und in das obige Code -Snippet übergeben, wird es ein Problem geben. Zu diesem Zeitpunkt ist unsere Handhabungsmethode so. In Aktion ist die Methode im Allgemeinen wie:
öffentliche Actionforward -Abfrage (ActionMapping Mapping, ActionForm Form,
HttpServletRequest -Anforderung, HttpServletResponse -Antwort)
Die Antwort befindet sich im Allgemeinen im vierten. Ändern wir also den obigen Code:
Bündeln
für (int i = 0, j = args.length; i <j; i ++) {argsClass [i] = args [i] .getClass (); }Wechsel zu:
für (int i = 0, j = args.length; i <j; i ++) {if (i == 3) {argsClass [i] = httpServletResponse.class; } else {argsClass [i] = args [i] .getClass (); }}Die obige Zusammenfassung (empfohlen), eine bestimmte Methode durch den Java -Reflexionsmechanismus dynamisch aufzurufen, ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.