Προγραμματισμός

Συμβουλή Java 10: Εφαρμόστε ρουτίνες επανάκλησης στην Java

Οι προγραμματιστές που είναι συνομιλητές στο μοντέλο προγραμματισμού που βασίζεται σε συμβάντα των MS-Windows και του X Window System είναι συνηθισμένοι να περνούν δείκτες συνάρτησης που επικαλούνται (δηλαδή, "call back") όταν συμβαίνει κάτι. Το αντικειμενοστρεφές μοντέλο της Java δεν υποστηρίζει προς το παρόν δείκτες μεθόδου και επομένως φαίνεται να αποκλείει τη χρήση αυτού του άνετου μηχανισμού. Αλλά όλα δεν χάνονται!

Η υποστήριξη της Java για διεπαφές παρέχει έναν μηχανισμό με τον οποίο μπορούμε να πάρουμε το ισοδύναμο των επιστροφών κλήσεων. Το κόλπο είναι να ορίσετε μια απλή διεπαφή που δηλώνει τη μέθοδο που επιθυμούμε να επικαλεστούμε.

Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να ειδοποιούμαστε όταν συμβαίνει ένα συμβάν. Μπορούμε να ορίσουμε μια διεπαφή:

δημόσια διεπαφή InterestingEvent {// Αυτή είναι απλώς μια κανονική μέθοδος ώστε να μπορεί να επιστρέψει κάτι ή // να λάβει επιχειρήματα αν θέλετε. δημόσιο κενό ενδιαφέρον Event (); } 

Αυτό μας δίνει τη δυνατότητα να αντιληφθούμε τα αντικείμενα των τάξεων που υλοποιώ, εφαρμόζω η διεπαφή. Επομένως, δεν χρειάζεται να ασχοληθούμε με άλλες ξένες πληροφορίες τύπου. Αυτό είναι πολύ καλύτερο από το hacking τραμπολίνο C λειτουργίες που χρησιμοποιούν το δεδομένα πεδίο widget για να κρατήσετε ένα δείκτη αντικειμένου κατά τη χρήση κώδικα C ++ με Motif.

Η τάξη που θα σηματοδοτήσει το συμβάν πρέπει να περιμένει αντικείμενα που εφαρμόζουν το Ενδιαφέρουσα εκδήλωση διεπαφή και στη συνέχεια επικαλέστε το ενδιαφέρουσα Εκδήλωση () κατάλληλη μέθοδο.

δημόσια τάξη EventNotifier {private InterestingEvent δηλαδή; ιδιωτικό boolean κάτι συνέβη public EventNotifier (Ενδιαφέρουσα εκδήλωση Event) {// Αποθηκεύστε το αντικείμενο συμβάντος για μελλοντική χρήση. δηλαδή = εκδήλωση; // Δεν έχει αναφερθεί ακόμη τίποτα. κάτιHappened = false; } // ... public void doWork () {// Ελέγξτε το κατηγορηματικό, το οποίο έχει οριστεί αλλού. if (somethingHappened) {// Σηματοδοτήστε το ζυγό κάνοντας χρήση της μεθόδου της διεπαφής. δηλαδή.interestingEvent (); } // ...} // ...} 

Σε αυτό το παράδειγμα, χρησιμοποίησα το κάτι συνέβη predicate για να παρακολουθείτε εάν το συμβάν πρέπει να ενεργοποιηθεί ή όχι. Σε πολλές περιπτώσεις, το ίδιο το γεγονός ότι η μέθοδος κλήθηκε αρκεί για να δικαιολογήσει τη σήμανση του ενδιαφέρουσα Εκδήλωση ().

Ο κωδικός που επιθυμεί να λάβει την ειδοποίηση συμβάντος πρέπει να εφαρμόσει το Ενδιαφέρουσα εκδήλωση διεπαφή και απλώς δώστε μια αναφορά στον εαυτό του στον κοινοποιούντα συμβάντων.

δημόσια κλάση CallMe εφαρμόζει το InterestingEvent {private EventNotifier en; public CallMe () {// Δημιουργήστε τον ειδοποιητή του συμβάντος και δώστε τον εαυτό μας σε αυτό. en = νέο EventNotifier (αυτό); } // Ορίστε τον πραγματικό χειριστή για το συμβάν. δημόσιο κενό ενδιαφέρον Εκδήλωση () {// Ουάου! Κάτι πραγματικά ενδιαφέρον πρέπει να έχει συμβεί! // Κάνε κάτι... } //... } 

Αυτό είναι το μόνο που υπάρχει. Ελπίζω ότι η χρήση αυτού του απλού ιδιώματος Java θα κάνει τη μετάβασή σας στην Java λίγο λιγότερο κουραστική.

Υποστηρίζοντας την καφεΐνη, τη ζάχαρη και τον πολύ μικρό ύπνο, ο John D. Mitchell έχει συμβουλευτεί τα περισσότερα από τα τελευταία εννέα χρόνια και έχει αναπτύξει λογισμικό PDA στη γλώσσα συναρμολόγησης OO στο Geoworks. Χρηματοδοτεί τον εθισμό του Java γράφοντας μεταγλωττιστές, Tcl / Tk, C ++ και συστήματα Java. Συνέγραψε το καυτό νέο βιβλίο Java Making Sense of Java και αυτή τη στιγμή αναπτύσσει έναν μεταγλωττιστή Java.

Αυτή η ιστορία, "Συμβουλή Java 10: Εφαρμογή ρουτίνας επανάκλησης στην Java" δημοσιεύθηκε αρχικά από την JavaWorld.