1. Pendahuluan
Dalam banyak bahasa pemrograman, konsep callback fungsi hadir. Ada pointer fungsi dalam C dan C ++, sehingga fungsi dapat dilewatkan sebagai parameter ke fungsi lain untuk panggilan nanti. Dalam JavaScript, callback fungsi dibawa ke ekstrem. Penanganan berbagai peristiwa, terutama acara yang tidak sinkron, pada dasarnya diselesaikan oleh callback fungsi.
Di Java, callback fungsi juga dapat diimplementasikan. Meskipun tidak ada penunjuk fungsi, Java dapat memperoleh metode kelas melalui mekanisme refleksi, berikan ke fungsi lain sebagai parameter tipe java.lang.reflect.method, dan kemudian panggil fungsi melalui metode Invoke dari objek metode.
Namun demikian, langkah -langkah panggilan dengan cara ini relatif rumit, tidak efisien dalam eksekusi, dan sulit untuk debug. Di Java, ada mekanisme yang lebih elegan daripada callback fungsi, yaitu antarmuka.
2. Mengapa Fungsi Panggilan Balik Membutuhkan
Fungsi panggilan balik sebenarnya merupakan cara untuk menunda implementasi fungsi tertentu.
Jika kita tahu terlebih dahulu operasi apa yang harus dilakukan program, maka tidak perlu fungsi callback sama sekali, dan itu dapat diimplementasikan secara langsung selama pemrograman.
Tetapi berkali -kali, ketika menulis kode, terutama ketika menulis kelas alat, pustaka fungsi atau kerangka kerja, fungsi yang relatif umum dan abstrak diimplementasikan, sementara fungsi dalam skenario tertentu diimplementasikan oleh pengembang yang menggunakan kelas ini.
Fungsi Callbacks dapat menyelesaikan situasi ini di mana Anda tidak tahu implementasi spesifik sebelumnya.
Contoh fungsi penyortiran
Misalnya, ketika kami ingin menerapkan fungsi penyortiran umum, kami tidak tahu terlebih dahulu jenis elemen yang akan digunakan pengembang lain untuk mengurutkan, dan kami tidak tahu standar apa yang menilai hubungan parsial (ukuran) elemen -elemen ini.
Oleh karena itu, pengembang lain dapat diminta untuk memberikan fungsi perbandingan saat menggunakan fungsi penyortiran, sehingga kita dapat menggunakan perbandingan untuk membandingkan ukuran elemen yang akan diurutkan tanpa mengetahui sebelumnya jenis elemen apa itu, atau implementasi spesifik perbandingan.
Di sini, fungsi perbandingan adalah fungsi panggilan balik untuk fungsi penyortiran.
Kode pseudo direpresentasikan sebagai berikut:
// Fungsi Sort General void sort (objek [] array, metode perbandingan) {// Gunakan fungsi Bandingkan untuk membandingkan hubungan ukuran elemen dalam array // urutkan array} // fungsi perbandingan spesifik diimplementasikan oleh penelepon int perbandingan (objek A, objek b) {// Bandingkan elemen A dan B dan kembalikan hubungan ukuran}Contoh fungsi pemrosesan asinkron
Misalnya, ketika kami menulis fungsi pemrosesan yang tidak sinkron, kami tidak tahu terlebih dahulu apa yang harus dilakukan pengembang lain ketika pemrosesan selesai, karena operasi ini hanya dapat diketahui ketika menggunakan fungsi dalam skenario tertentu.
Oleh karena itu, pengembang dapat diminta untuk memberikan panggilan balik fungsi panggilan balik saat menggunakan fungsi ini. Dengan cara ini, ketika kita menulis fungsi pemrosesan asinkron, kita dapat memanggil fungsi callback untuk melakukan beberapa pekerjaan akhir tanpa mengetahui apa pekerjaan akhir ini sebelumnya.
Kode pseudo direpresentasikan sebagai berikut:
// Fungsi pemrosesan async membatalkan asynprocess (metode callback) {// menjalankan callback tugas asinkron ();} // fungsi panggilan balik spesifik batal callback () diimplementasikan oleh penelepon {// operasi yang akan dilakukan setelah pemrosesan asinkron diselesaikan}3. Gunakan antarmuka alih -alih callback fungsi
Kami menyebutkan di atas bahwa alasan mengapa callback fungsi digunakan adalah karena kami tidak tahu implementasi spesifik fungsi tertentu sebelumnya, sehingga implementasi spesifik diserahkan kepada pengembang lain untuk diselesaikan.
Apakah Anda pikir kalimat ini tampaknya menggambarkan antarmuka Java? Antarmuka adalah definisi abstrak dari serangkaian metode, dan implementasi spesifik diselesaikan oleh kelas yang mengimplementasikan antarmuka.
Oleh karena itu, menggunakan dua karakteristik objek yang berorientasi pada objek dan berorientasi antarmuka, callback fungsi dapat diganti.
Kami memberikan dua contoh di atas untuk menggambarkan bagaimana antarmuka menggantikan callback fungsi.
Urutkan fungsi
Menggunakan antarmuka untuk mengimplementasikan fungsi penyortiran, tidak lagi mengharuskan pengembang untuk memberikan fungsi callback dibandingkan saat menggunakan fungsi penyortiran, tetapi mengharuskan pengembang untuk memastikan bahwa elemen yang akan diurutkan mengimplementasikan antarmuka yang sebanding. Berdasarkan premis bahwa "elemen yang akan diurutkan telah mengimplementasikan antarmuka yang sebanding", kami dapat mengimplementasikan fungsi penyortiran tanpa mengetahui jenis elemen yang akan diurutkan.
// Umum Sort Function Void Sort (Object [] Array) {// Gunakan metode compareTo antarmuka yang sebanding // Bandingkan ukuran elemen untuk mengurutkan array. } // Antarmuka yang ditentukan oleh fungsi penyortiran antarmuka publik sebanding {public int compareto (objek lain);} // mengimplementasikan unsur kelas publik antarmuka yang sebanding dengan mengimplementasikan yang sebanding {@override public int compareto (objek lain) {// menilai hubungan ukuran saat ini antara elemen dan lainnya/dan mengembalikan hubungan antara dua}}Fungsi pemrosesan asinkron
Saat menggunakan antarmuka untuk mengimplementasikan fungsi pemrosesan asinkron, pengembang tidak memerlukan callback callback callback, tetapi membutuhkan objek yang mengimplementasikan antarmuka yang ditentukan, yang dengan baik mencerminkan ide berorientasi objek Java. Dibandingkan dengan memberikan fungsi, suatu objek berisi lebih banyak informasi dan lebih fleksibel untuk digunakan. Namun pada dasarnya, fungsi pemrosesan asinkron ini masih menggunakan antarmuka untuk menyelesaikan pekerjaan finishing.
// Fungsi pemrosesan async membatalkan asynprocess (actionListener al) {// menjalankan tugas asinkron al.actionPerformed ();} // antarmuka yang didefinisikan oleh fungsi pemrosesan antarmuka publistener publistener @void @void @void @ {// Pekerjaan tambahan yang diperlukan ketika fungsi pemrosesan asinkron selesai}} // memanggil fungsi pemrosesan asinkron statis public static main (string [] args) {asynprocess (ekstratask baru ());}4. Ringkasan
Metode Callback dapat diringkas sebagai: Menerapkan fungsi fungsi umum. Saat memanggil fungsi umum ini dalam skenario tertentu, penelepon perlu memberikan panggilan balik fungsi panggilan balik yang sesuai. Fungsi fungsi umum menggunakan fungsi panggilan balik ini untuk menyelesaikan tugas dalam skenario tertentu.
Cara mengimplementasikan antarmuka adalah: mengimplementasikan fungsi fungsi umum. Saat memanggil fungsi umum ini dalam skenario tertentu, objek yang dioperasikan perlu mengimplementasikan antarmuka yang sesuai dengan sendirinya. Fungsi umum akan menggunakan antarmuka ini untuk menyelesaikan tugas dalam skenario spesifik.
Menggunakan callback atau antarmuka fungsi dapat menyelesaikan situasi di mana Anda tidak tahu implementasi spesifik sebelumnya. Metode panggilan balik fungsi melewati fungsi, sedangkan metode antarmuka melewati objek yang mengimplementasikan antarmuka.
Di Java, callback fungsi harus diselesaikan menggunakan mekanisme refleksi, yang rentan terhadap kesalahan dan tidak efisien. Menggunakan antarmuka dapat membuat logika kode lebih jelas, lebih efisien, dan lebih mudah untuk debug.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.