Java-Tipp 10: Implementieren Sie Rückrufroutinen in Java

Entwickler, die mit dem ereignisgesteuerten Programmiermodell von MS-Windows und dem X Window System vertraut sind, sind es gewohnt, Funktionszeiger zu übergeben, die aufgerufen (dh "zurückgerufen") werden, wenn etwas passiert. Das objektorientierte Modell von Java unterstützt derzeit keine Methodenzeiger und scheint daher die Verwendung dieses komfortablen Mechanismus auszuschließen. Aber es ist noch nicht alles verloren!

Die Unterstützung von Schnittstellen durch Java bietet einen Mechanismus, mit dem wir das Äquivalent von Rückrufen erhalten können. Der Trick besteht darin, eine einfache Schnittstelle zu definieren, die die Methode deklariert, die aufgerufen werden soll.

Angenommen, wir möchten benachrichtigt werden, wenn ein Ereignis eintritt. Wir können eine Schnittstelle definieren:

öffentliche Schnittstelle InterestingEvent {// Dies ist nur eine reguläre Methode, damit sie etwas zurückgeben oder // Argumente annehmen kann, wenn Sie möchten. public void interessantEvent (); }}

Dies gibt uns einen Überblick über alle Objekte von Klassen, die die Schnittstelle implementieren . Wir müssen uns also nicht mit anderen irrelevanten Typinformationen befassen. Dies ist viel schöner als das Hacken von Trampolin-C-Funktionen, die das Datenfeld von Widgets verwenden, um einen Objektzeiger zu halten, wenn C ++ - Code mit Motiv verwendet wird.

Die Klasse, die das Ereignis signalisiert, muss Objekte erwarten, die die InterestingEvent- Schnittstelle implementieren , und anschließend die interessanteEvent () -Methode aufrufen .

öffentliche Klasse EventNotifier {private InterestingEvent ie; privates boolesches Etwas geschah; public EventNotifier (InterestingEvent-Ereignis) {// Speichern Sie das Ereignisobjekt zur späteren Verwendung. dh = Ereignis; // Noch nichts zu berichten. etwas passiert = falsch; } // ... public void doWork () {// Überprüfe das Prädikat, das an anderer Stelle gesetzt ist. if (SomethingHappened) {// Signalisieren Sie die Gerade, indem Sie die Methode der Schnittstelle aufrufen. dh.interessantes Ereignis (); } // ...} // ...}

In diesem Beispiel habe ich das somethingHappened Prädikat zu verfolgen , ob oder nicht sollte das Ereignis ausgelöst werden. In vielen Fällen reicht die Tatsache, dass die Methode aufgerufen wurde, aus, um die Signalisierung des interessanten Ereignisses () zu rechtfertigen .

Der Code, der die Ereignisbenachrichtigung erhalten möchte, muss die InterestingEvent- Schnittstelle implementieren und lediglich einen Verweis auf sich selbst an den Ereignisbenachrichtiger übergeben.

öffentliche Klasse CallMe implementiert InterestingEvent {private EventNotifier en; public CallMe () {// Erstelle den Ereignisbenachrichtiger und übergebe uns ihm. en = neuer EventNotifier (this); } // Definiere den tatsächlichen Handler für das Ereignis. public void interessantEvent () {// Wow! Es muss etwas wirklich Interessantes passiert sein! // Etwas tun... } //... }

Das ist alles dazu. Ich hoffe, dass die Verwendung dieser einfachen Java-Sprache Ihren Übergang zu Java etwas weniger nervös macht.

John D. Mitchell, der sich von Koffein, Zucker und zu wenig Schlaf ernährt, berät seit fast neun Jahren und hat bei Geoworks PDA-Software in OO-Assemblersprache entwickelt. Er finanziert seine Java-Sucht durch das Schreiben von Compilern, Tcl / Tk-, C ++ - und Java-Systemen. Er war Co-Autor des heißen neuen Java-Buches Making Sense of Java und entwickelt derzeit einen Java-Compiler.

Diese Geschichte "Java-Tipp 10: Rückrufroutinen in Java implementieren" wurde ursprünglich von JavaWorld veröffentlicht.