Programiranje

Nasvet Java 10: V Java izvedite rutine povratnega klica

Razvijalci, ki se poznajo v programskem modelu MS-Windows in X Window System, ki temelji na dogodkih, so navajeni, da posredujejo kazalce funkcij, ki se prikličejo (to pomeni, "pokličejo nazaj"), ko se kaj zgodi. Objektno usmerjeni model Java trenutno ne podpira kazalcev metod, zato se zdi, da onemogoča uporabo tega udobnega mehanizma. Toda vse ni izgubljeno!

Podpora Jave za vmesniki ponuja mehanizem, s pomočjo katerega lahko dobimo enakovredne povratne klice. Trik je v določitvi preprostega vmesnika, ki razglasi metodo, ki jo želimo uporabiti.

Denimo, da želimo biti obveščeni, ko se zgodi dogodek. Določimo lahko vmesnik:

javni vmesnik InterestingEvent {// To je samo običajna metoda, tako da lahko vrne nekaj ali // vzame argumente, če želite. javna praznina interestingEvent (); } 

To nam omogoča oprijem vseh predmetov razredov, ki izvajati vmesnik. Torej se nam ni treba ukvarjati z drugimi tujimi informacijami. To je veliko lepši od vdora v funkcije trampolina C, ki uporabljajo podatkov polje pripomočkov za držanje kazalca predmeta pri uporabi kode C ++ z motivom.

Razred, ki bo signaliziral dogodek, mora pričakovati predmete, ki izvajajo Zanimiv dogodek in nato pokličite interestingEvent () ustrezna metoda.

javni razred EventNotifier {private InterestingEvent ie; private boolean somethingHappened; public EventNotifier (InterestingEvent event) {// Shrani objekt dogodka za kasnejšo uporabo. tj = dogodek; // Ničesar še ni treba prijaviti. somethingHappened = false; } // ... public void doWork () {// Preverite predikat, ki je nastavljen drugje. if (somethingHappened) {// signalizira celo z uporabo metode vmesnika. tj.zanimljiv dogodek (); } // ...} // ...} 

V tem primeru sem uporabil nekaj se je zgodilo predikat za sledenje, ali naj se dogodek sproži ali ne. V mnogih primerih že samo dejstvo, da je bila metoda poklicana, zadostuje za signalizacijo interestingEvent ().

Koda, ki želi prejeti obvestilo o dogodku, mora implementirati Zanimiv dogodek vmesnik in samo pošljite referenco na sebe prijavitelju dogodka.

javni razred CallMe implementira InterestingEvent {private EventNotifier sl; public CallMe () {// Ustvarimo obvestilo o dogodku in se mu posredujemo. sl = nov EventNotifier (to); } // Določite dejanski obdelovalec dogodka. public void interestingEvent () {// Vau! Nekaj ​​zares zanimivega se je moralo zgoditi! // Naredi kaj... } //... } 

To je vse. Upam, da bo uporaba tega preprostega idioma Java naredila vaš prehod na Javo nekoliko manj nervozen.

John D. Mitchell, ki se preživlja s kofeinom, sladkorjem in premajhnim spanjem, se večino zadnjih devetih let posvetuje in je pri Geoworksu razvil programsko opremo PDA v zbirnem jeziku OO. Svojo zasvojenost z Javo financira s pisanjem prevajalnikov, sistemov Tcl / Tk, C ++ in Java. Je soavtor vroče nove knjige Java Making Sense of Java in trenutno razvija prevajalnik Java.

To zgodbo, "Java Nasvet 10: Implementacija rutin povratnega klica v Javi", je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found