Ich habe kürzlich auf ein solches Problem in meiner Arbeit gestoßen:
Ich habe in einem bestimmten Projekt ein Testwerkzeug für alle Schnittstellen erstellt. Mithilfe der Java -Swing -Technologie hat das Projekt unterschiedliche Versionen. Nicht alle Schnittstellen in der Version sind gleich und die Werkzeuge, die ich erstellt habe, müssen mit allen Versionen kompatibel sein.
Dieses Problem wurde also eingeführt:
Wenn in einigen Versionen einige Schnittstellen nicht vorhanden sind, wird bei der Durchführung dieser Operation über die Schnittstelle ein Fehler gemeldet. Um mit allen Versionen kompatibel zu sein, müssen Sie daher prüfen, ob die Methode vorhanden ist, bevor Sie die Methode aufrufen. Gleichzeitig, um keine Ausnahmen während der Zusammenstellung zu werfen, wenn Sie die Methode aufrufen
Es muss auch durch Reflexion aufgerufen werden, und die spezifische Implementierung lautet wie folgt:
1. Verwenden Sie die Reflexion, um festzustellen, ob die Methode vorliegt
/ *** Bestimmen Sie, ob die Methode existiert try {if (null! = obj) {method method = obj.getClass (). getMethod (methodName, paratypes); }} catch (NoSuchMethodException ex) {showWarninfo (ex.ToString ()); log.Error ("Ausnahme kommt auf:" + mainjframe.hostname + "; Details sind:" + ex.getMessage ()); Ergebnis = falsch; } Rückgabeergebnis; }Parameterbeschreibung:
(1) OBJ: Ein Objekt, das eine Methode aufruft
(2) MethodName: Der Name der zu aufgerufenen Methode
(3) Paratypen: Der von der Methode erforderliche Parametertyp (Mehrfach ist ein Array)
Mit dieser Methode können Sie bestimmen, ob die Methode des MethodName (Parameter Type), die Sie über das OBJ -Objekt aufrufen, vorhanden ist. Wenn es nicht existiert, wird eine NoSuchmethodexception -Ausnahme ausgeführt
2. Rufen Sie die Methode durch Reflexion auf, um die Ausnahmen von Kompilierzeiten zu vermeiden
sysuser = mainjframe.getSysUSER (); Class [] paramobj = {string.class, long.class, string.class, string.class, int.class}; // beurteilen, ob die Methode boolean isExist = CommonUtil.judgemethisexist (Sysuser, "CreateBucket", Paramobj) existiert; if (isExist) {try {// Methodenklasse clazz = sysuser.getClass (); // Methodenname-Der Parametertyp in der Methode (in Parameterreihenfolge) Methode createBucket = clazz.getDeclaredMethod ("createBucket", string.class, long.class, string.class, string.class, int.class); int create = (int) createBucket.invoke (sysuser, bucketname, long.parselong (bucketSize), bucketloc, bucketacl, Integer.ParseInt (Stringutil.EmptytoZero (Bucketcycle))); if (create == 1) {Commonutil.showInfo ("Eimer erstellt erfolgreich"); log.info ("Eimer erfolgreich erstellt"); } else {Commonutil.showwarninfo ("Bucket Creation fehlgeschlagen, Server interner Fehler!"); log.info ("Bucket Creation fehlgeschlagen, Server interner Fehler"); }} catch (Ausnahme ex) {Commonutil.showwarninfo (ex.getMessage ()); log.Error ("Ausnahme kommt auf:" + mainjframe.hostname + "; die Details sind:" + ex.getMessage ()); }}Im obigen Code:
Zeile 1: Objektsystem, der die Methode CreateBucket -Methode aufruft
Zeile 2: Array von Parametertypen in der Methode, die bei der Bestimmung verwendet wird, ob die Methode vorliegt
Zeile 3: Bestimmen Sie, ob die Methode nach Array von Objekt, Methodenname und Parametertyp existiert
In den oben genannten drei Zeilen werden die folgenden Aufgaben ausgeführt, wenn die Methode vorliegt. Wenn es nicht vorhanden ist, werden Ausnahmeinformationen aufgefordert.
Zeile 6: Holen Sie sich die Klasse des Objekts
Zeile 7: Erhalten Sie das Methodenmethodenobjekt, der Parameter ist der Typ, der dem Methodennamen und dem Parameter entspricht
Zeile 8: Rufen Sie die Methode CreateBucket über Method -Objektreflexion auf. Die Parameter sind das Sysuser -Objekt bzw. die erforderlichen Parameter (Werte).
Durch die obige Methode tritt keine Kompilierungs-Zeit-Ausnahme auf, selbst wenn eine Schnittstelle im Objekt nicht vorhanden ist.
Um ehrlich zu sein, ist dies das erste Mal, dass ich in meinem Projekt auf ein Problem mit Java Reflection gestoßen bin, daher ist es notwendig, es aufzuzeichnen!
Zusammenfassen
Das obige ist der gesamte Inhalt der Anwendungshinweise dieses Artikels zur Java -Reflexion in der tatsächlichen Arbeit. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Seite verweisen:
Java Reflection Tutorial
Dinge, die Sie über den Java -Reflexionsmechanismus wissen müssen
Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!