Programmēšana

Java 10. padoms: ieviešiet atzvana rutīnas Java

Izstrādātāji, kas pārzina notikumu virzītu MS-Windows un X Window sistēmas programmēšanas modeli, ir pieraduši nodot funkciju rādītājus, kuri tiek izsaukti (tas ir, "izsaukti"), kad kaut kas notiek. Java objektorientētais modelis pašlaik neatbalsta metožu rādītājus, un tādējādi, šķiet, tas izslēdz šī ērtā mehānisma izmantošanu. Bet viss nav pazudis!

Java atbalsts saskarnes nodrošina mehānismu, ar kura palīdzību mēs varam iegūt atzvanu ekvivalentu. Triks ir definēt vienkāršu interfeisu, kas deklarē metodi, kuru mēs vēlamies izmantot.

Piemēram, pieņemsim, ka mēs vēlamies saņemt paziņojumu par notikumu. Mēs varam definēt saskarni:

publiskā saskarne InterestingEvent {// Šī ir tikai parasta metode, lai tā varētu kaut ko atgriezt vai // pieņemt argumentus, ja vēlaties. public void interestEvent (); } 

Tas mums ļauj satvert visus objektu klases ieviest saskarni. Tātad mums nav jāuztraucas par citu sveša veida informāciju. Tas ir daudz jaukāk nekā uzlauzt batuta C funkcijas, kurās tiek izmantots dati logrīku lauks objekta rādītāja turēšanai, izmantojot C ++ kodu ar Motif.

Klasei, kas signalizēs par notikumu, ir jāgaida objekti, kas īsteno Interesants pasākums saskarni un pēc tam izsaukt interestEvent () metodi.

public class EventNotifier {private InterestingEvent ie; privāts Būla kaut kas noticis; public EventNotifier (InterestingEvent event) {// Saglabājiet notikuma objektu vēlākai lietošanai. ie = notikums; // Pagaidām nav ko ziņot. somethingHappened = nepatiesa; } // ... public void doWork () {// Pārbaudiet predikātu, kas ir iestatīts citur. if (somethingHappened) {// Signalizējiet pat, piesaucot saskarnes metodi. ie.interesantsEvent (); } // ...} // ...} 

Šajā piemērā es izmantoju kaut kas notika predikāts, lai izsekotu, vai notikums ir jāizraisa. Daudzos gadījumos pats fakts, ka metode tika izsaukta, ir pietiekams, lai pamatotu interestEvent ().

Kodam, kas vēlas saņemt paziņojumu par notikumu, ir jāievieš Interesants pasākums saskarni un vienkārši nododiet atsauci uz sevi notikuma paziņotājam.

publiskā klase CallMe īsteno InterestingEvent {private EventNotifier lv; public CallMe () {// Izveidojiet notikuma paziņotāju un nododiet tam sevi. lv = new EventNotifier (šis); } // Definējiet faktisko notikuma apdarinātāju. public void interestEvent () {// Oho! Jābūt kaut kam patiešām interesantam! // Dari kaut ko... } //... } 

Tas ir viss, kas tam ir. Es ceru, ka šīs vienkāršās Java idiomas izmantošana padarīs jūsu pāreju uz Java mazliet mazāk nervozu.

Uzturoties kofeīnā, cukurā un pārāk maz miega, Džons D. Mičels ir konsultējis lielāko daļu pēdējo deviņu gadu un ir izstrādājis PDA programmatūru OO montāžas valodā Geoworks. Viņš finansē savu Java atkarību, rakstot kompilatorus, Tcl / Tk, C ++ un Java sistēmas. Viņš līdzautorēja jauno karsto Java grāmatu Making Sense of Java un šobrīd izstrādā Java kompilatoru.

Šo stāstu “Java Padoms 10: Īstenojiet atzvanīšanas rutīnas Java” sākotnēji publicēja JavaWorld.

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