Petua Java 10: Terapkan rutin panggilan balik di Java

Pembangun yang mahir dalam model pengaturcaraan berasaskan MS-Windows dan Sistem X Window terbiasa melewati penunjuk fungsi yang dipanggil (iaitu, "dipanggil kembali") apabila sesuatu berlaku. Model berorientasikan objek Java pada masa ini tidak menyokong petunjuk kaedah, dan dengan demikian nampaknya menghalang penggunaan mekanisme yang selesa ini. Tetapi semua tidak hilang!

Sokongan antara muka Java menyediakan mekanisme yang membolehkan kita mendapatkan setara balik. Caranya adalah dengan menentukan antara muka sederhana yang menyatakan kaedah yang ingin kita gunakan.

Sebagai contoh, anggaplah kita mahu diberitahu apabila sesuatu peristiwa berlaku. Kami dapat menentukan antara muka:

Antaramuka umum MinatEvent {// Ini hanyalah kaedah biasa sehingga dapat mengembalikan sesuatu atau // mengambil hujah jika anda mahu. kekosongan awam menarikEvent (); }

Ini memberi kita gambaran mengenai objek kelas yang melaksanakan antara muka. Oleh itu, kita tidak perlu mementingkan diri sendiri dengan maklumat jenis yang lain. Ini jauh lebih baik daripada meretas fungsi trampolin C yang menggunakan medan data widget untuk menahan penunjuk objek ketika menggunakan kod C ++ dengan Motif.

Kelas yang akan memberi isyarat peristiwa perlu mengharapkan objek yang melaksanakan antara muka InterestingEvent dan kemudian menggunakan kaedah menarikEvent () yang sesuai.

EventNotifier kelas awam {private InterestingEvent iaitu; peribadi boolean sesuatu yang Terjadi; public EventNotifier (Acara InterestingEvent) {// Simpan objek acara untuk digunakan kemudian. iaitu = peristiwa; // Belum ada laporan. sesuatuHappened = palsu; } // ... doWork kekosongan awam () {// Periksa predikat, yang ada di tempat lain. jika (sesuatuHappened) {// Isyarat genap dengan menggunakan kaedah antara muka iaitu.interestingEvent (); } // ...} // ...}

Dalam contoh ini, saya menggunakan somethingHappened predikat untuk mengesan sama ada atau tidak sekiranya perlu dicetuskan. Dalam banyak keadaan, hakikat bahawa kaedah itu dipanggil sudah cukup untuk memberi isyarat kepada peristiwa yang menarik () .

Kod yang hasrat untuk menerima pemberitahuan acara mesti melaksanakan InterestingEvent muka dan hanya lulus sebutan mengenai dirinya kepada pemberitahu acara tersebut.

CallMe kelas awam mengimplementasikan InterestingEvent {privateNotifier en; CallMe awam () {// Buat pemberitahuan acara dan sampaikan diri kita kepadanya. en = EventNotifier baru (ini); } // Tentukan pengendali sebenar untuk acara tersebut. kekosongan awam menarikEvent () {// Wow! Sesuatu yang sangat menarik pasti berlaku! // Lakukan sesuatu... } //... }

Itu sahaja yang ada. Saya harap penggunaan simpulan bahasa Java yang sederhana ini akan menjadikan peralihan anda ke Java menjadi sedikit kurang senang.

Memandangkan kafein, gula, dan terlalu sedikit tidur, John D. Mitchell telah berunding selama hampir sembilan tahun terakhir, dan telah mengembangkan perisian PDA dalam bahasa pemasangan OO di Geoworks. Dia membiayai ketagihan Java dengan menulis penyusun, Tcl / Tk, C ++, dan sistem Java. Dia mengarang buku Java baru, Making Sense of Java, dan saat ini sedang mengembangkan penyusun Java.

Kisah ini, "Petua Java 10: Menerapkan rutin panggilan balik di Java" awalnya diterbitkan oleh JavaWorld.