Ohjelmointi

Java-vinkki 10: Ota takaisinsoittorutiinit käyttöön Java-ohjelmassa

Kehittäjät, jotka ovat perehtyneet MS-Windowsin ja X Window -järjestelmän tapahtumavetoiseen ohjelmointimalliin, ovat tottuneet välittämään toiminto-osoittimia, joita kutsutaan (eli "kutsutaan takaisin"), kun jotain tapahtuu. Javan olio-malli ei tällä hetkellä tue menetelmän osoittimia, ja näyttää siten sulkevan pois tämän mukavan mekanismin käytön. Mutta kaikki ei ole kadonnut!

Java tukee rajapinnat tarjoaa mekanismin, jolla voimme saada vastaavan soittopyynnön. Temppu on määritellä yksinkertainen käyttöliittymä, joka ilmoittaa menetelmän, jota haluamme käyttää.

Oletetaan esimerkiksi, että haluamme saada ilmoituksen tapahtumasta. Voimme määritellä käyttöliittymän:

julkinen käyttöliittymä InterestingEvent {// Tämä on vain tavallinen menetelmä, jotta se voi palauttaa jotain tai // ottaa argumentteja, jos haluat. public void interestEvent (); } 

Tämä antaa meille otteen kaikista luokkien kohteista, jotka toteuttaa käyttöliittymä. Joten meidän ei tarvitse huolehtia mistään muusta vieraasta tyyppisestä tiedosta. Tämä on paljon mukavampi kuin hakkerointi trampoliini C -toiminnot, jotka käyttävät tiedot widgetien kenttä objektiosoittimen pitämiseksi käytettäessä C ++ -koodia Motifin kanssa.

Luokan, joka ilmoittaa tapahtumasta, on odotettava objektit, jotka toteuttavat Mielenkiintoinen tapahtuma käyttöliittymän ja sitten käyttää interestEvent () tapauksen mukaan.

public class EventNotifier {private InterestingEvent ie; yksityinen looginen jotainTapahtui; public EventNotifier (InterestingEvent event) {// Tallenna tapahtuma-objekti myöhempää käyttöä varten. eli = tapahtuma; // Ei vielä mitään ilmoitettavaa. somethingHappened = väärä; } // ... public void doWork () {// Tarkista predikaatti, joka on asetettu muualle. if (somethingHappened) {// Signal the even kutsumalla käyttöliittymän menetelmää. ts. mielenkiintoinen tapahtuma (); } // ...} // ...} 

Tässä esimerkissä käytin jotain tapahtui predikaatti seuraamaan tapahtuman käynnistämistä vai ei. Monissa tapauksissa jo se tosiasia, että menetelmä kutsuttiin, riittää oikeuttamaan interestEvent ().

Koodin, joka haluaa saada tapahtumailmoituksen, on toteutettava Mielenkiintoinen tapahtuma käyttöliittymän ja välittää vain viittauksen itselleen tapahtuman ilmoittajalle.

julkinen luokka CallMe toteuttaa mielenkiintoisen tapahtuman {private EventNotifier fi; public CallMe () {// Luo tapahtuman ilmoittaja ja välitä itsemme sille. en = new EventNotifier (tämä); } // Määritä tapahtuman varsinainen käsittelijä. public void interestEvent () {// Vau! Jotakin todella mielenkiintoista on täytynyt tapahtua! // Tee jotain... } //... } 

Siinä kaikki siinä on. Toivon, että tämän yksinkertaisen Java-idiomin käyttäminen tekee siirtymisestä Java-versioon hieman vähemmän hermostavaa.

Kofeiinia, sokeria ja liian vähän unta tarvitseva John D. Mitchell on konsultoinut suurimman osan viimeisistä yhdeksästä vuodesta ja kehittänyt PDA-ohjelmiston OO: n kokoonpanokielellä Geoworksissa. Hän rahoittaa Java-riippuvuutensa kirjoittamalla kääntäjiä, Tcl / Tk, C ++ ja Java-järjestelmiä. Hän kirjoitti uuden Java-kirjan Making Sense of Java -kirjan ja kehittää parhaillaan Java-kääntäjää.

Tämän tarinan "Java Tip 10: Toteuta takaisinsoittorutiinit Javassa" julkaisi alun perin JavaWorld.