Programavimas

„Java 10“ patarimas: įgyvendinkite „Java“ skambinimo tvarką

Kūrėjai, kalbantys apie įvykių valdomą „MS-Windows“ ir „X Window“ sistemos programavimo modelį, yra įpratę perduoti funkcijų rodykles, kurios yra iškviečiamos (tai yra, „atšaukiamos“), kai kas nors atsitinka. Objektinis „Java“ modelis šiuo metu nepalaiko metodų rodyklių, todėl panašu, kad negalima naudoti šio patogaus mechanizmo. Bet viskas nėra prarasta!

„Java“ palaikymas sąsajos pateikia mechanizmą, pagal kurį galime gauti atgalinių skambučių atitikmenį. Apgaulė yra apibrėžti paprastą sąsają, kuri deklaruoja metodą, kurį norime naudoti.

Pvz., Tarkime, kad mes norime būti informuoti apie įvykį. Mes galime apibrėžti sąsają:

viešoji sąsaja „InterestingEvent“ {// Tai tik įprastas metodas, todėl jis gali ką nors grąžinti arba // imtis argumentų, jei norite. public void interestEvent (); } 

Tai leidžia mums sugriebti bet kokius klasių objektus įgyvendinti sąsaja. Taigi mums nereikia rūpintis jokia kita pašalinio tipo informacija. Tai yra daug maloniau nei nulaužti batuto C funkcijas, naudojančias duomenis valdiklių laukas objekto žymekliui laikyti, kai naudojamas C ++ kodas su „Motif“.

Klasė, kuri praneš apie įvykį, turi tikėtis objektų, kurie įgyvendina Įdomus renginys sąsają ir tada iškvieskite įdomus renginys () metodas.

viešoji klasė „EventNotifier“ {private InterestingEvent ie; privatus loginis kažkas nutiko; public EventNotifier (InterestingEvent event) {// Išsaugokite įvykio objektą vėlesniam naudojimui. ty = įvykis; // Dar nėra ko pranešti. kažkas įvyko = klaidinga; } // ... public void doWork () {// Patikrinkite predikatą, kuris nustatytas kitur. if (somethingHappened) {// Signalizuokite net iškviesdami sąsajos metodą. ty.domusEventas (); } // ...} // ...} 

Šiame pavyzdyje aš naudojau kažkas nutiko predikatą sekti, ar įvykis turi būti suaktyvintas. Daugeliu atvejų metodo iškvietimo pakanka faktui, kad reikia signalizuoti įdomus renginys ().

Kodas, norintis gauti pranešimą apie įvykį, turi įdiegti Įdomus renginys sąsają ir tiesiog perduokite nuorodą į save įvykių pranešėjui.

viešoji klasė „CallMe“ įgyvendina „InterestingEvent“ {private EventNotifier lt; public CallMe () {// Sukurkite pranešimą apie įvykį ir perduokite jam save. lt = new EventNotifier (tai); } // Apibrėžkite tikrąjį įvykio tvarkytuvą. public void interestEvent () {// Oho! Tikrai įvyko kažkas tikrai įdomaus! // Daryk ką nors ...} // ...} 

Tai viskas. Tikiuosi, kad naudojant šią paprastą „Java“ idiomą jūsų perėjimas prie „Java“ bus šiek tiek mažiau jaudinantis.

Laikydamasis kofeino, cukraus ir per mažai miego, Johnas D. Mitchellas konsultavo beveik visus pastaruosius devynerius metus ir sukūrė „Pow“ programinę įrangą OO surinkimo kalba „Geoworks“. Savo Java priklausomybę jis finansuoja rašydamas kompiliatorius, Tcl / Tk, C ++ ir Java sistemas. Jis sutiko su nauja karšta „Java“ knyga „Making Sense of Java“ ir šiuo metu kuria „Java“ kompiliatorių.

Šią istoriją „Java 10 patarimas: Įkelkite atgalinio ryšio tvarką Java“ iš pradžių paskelbė „JavaWorld“.