Java tipp 10: végre visszahívási rutinok Java

Fejlesztők jártas az esemény-vezérelt programozási modell MS-Windows és az X Window System megszokták, hogy elhaladó funkció mutatók, amelyek hivatkoznak (azaz “hívott vissza”), ha valami történik. A Java objektum-orientált modellje jelenleg nem támogatja a metódusmutatókat, ezért úgy tűnik, hogy kizárja ennek a kényelmes mechanizmusnak a használatát. De nincs minden veszve!

A Java interfészek támogatása olyan mechanizmust biztosít, amellyel egyenértékű visszahívásokat kapunk. A trükk egy egyszerű felület meghatározása, amely deklarálja azt a módszert, amelyet meg akarunk hívni.

tegyük fel például, hogy értesítést akarunk kapni egy esemény bekövetkezéséről. Definiálhatunk egy interfészt:

public interface InterestingEvent{ // This is just a regular method so it can return something or // take arguments if you like. public void interestingEvent ();}

ez megragad minket az interfészt megvalósító osztályok bármely objektumán. Tehát nem kell foglalkoznunk más idegen típusú információkkal. Ez sokkal szebb, mint a trambulin C funkciók hackelése, amelyek a widgetek adatmezőjét használják objektummutató tartására, amikor C++ kódot használnak motívummal.

az eseményt jelző osztálynak olyan objektumokra kell számítania, amelyek megvalósítják az InterestingEvent interfészt, majd szükség szerint meghívják az interestingEvent() metódust.

public class EventNotifier{ private InterestingEvent ie; private boolean somethingHappened; public EventNotifier (InterestingEvent event) { // Save the event object for later use. ie = event; // Nothing to report yet. somethingHappened = false; } //... public void doWork () { // Check the predicate, which is set elsewhere. if (somethingHappened) { // Signal the even by invoking the interface's method. ie.interestingEvent (); } //... } // ...}

ebben a példában a somethingHappened predikátumot használtam annak nyomon követésére, hogy az eseményt ki kell-e indítani. Sok esetben az a tény, hogy a módszert meghívták, elegendő ahhoz, hogy indokolja az interestingEvent () jelzését.

az eseményértesítést megkapó kódnak végre kell hajtania az InterestingEvent felületet, és csak egy hivatkozást kell átadnia az eseményértesítőnek.

public class CallMe implements InterestingEvent{ private EventNotifier en; public CallMe () { // Create the event notifier and pass ourself to it. en = new EventNotifier (this); } // Define the actual handler for the event. public void interestingEvent () { // Wow! Something really interesting must have occurred! // Do something... } //...}

ennyi az egész. Remélem, használja ezt az egyszerű Java idióma teszi az átmenet Java egy kicsit kevésbé ideges.

koffeinnel, cukorral és túl kevés alvással táplálkozva John D. Mitchell az elmúlt kilenc év legnagyobb részében konzultált, és PDA szoftvert fejlesztett ki OOassembly nyelven a Geoworksnál. Ő finanszírozza a Java függőség bywriting fordítók, Tcl/Tk, C++ és Java rendszerek. Ő társszerzője thehot új Java könyv értelme Javaés jelenleg egy Java fordítót fejleszt.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.