טיפ ג'אווה 10: יישום שגרות להתקשרות חוזרת בג'אווה

מפתחים המוכרים במודל התכנות מונחה האירועים של MS-Windows ומערכת ה- X Window רגילים להעביר מצביעי פונקציה המופעלים (כלומר "נקראים חזרה") כשמשהו קורה. המודל מונחה האובייקטים של ג'אווה אינו תומך כרגע במצבי שיטה, ונראה כי כך מונע שימוש במנגנון נוח זה. אבל הכל לא אבוד!

התמיכה של Java בממשקים מספקת מנגנון שבאמצעותו אנו יכולים לקבל את המקבילה להתקשרות חוזרת. החוכמה היא להגדיר ממשק פשוט שמכריז על השיטה שאנו רוצים להפעיל.

לדוגמה, נניח שנרצה לקבל הודעה כאשר אירוע קורה. אנו יכולים להגדיר ממשק:

ממשק ציבורי InterestingEvent {// זו רק שיטה רגילה כך שהיא יכולה להחזיר משהו או // לקחת ויכוחים אם תרצו. חלל ציבורי מענייןEvent (); }

זה נותן לנו אחיזה בכל אובייקטים של מחלקות שמיישמים את הממשק. לכן, איננו צריכים לדאוג למידע אחר מסוג אחר. זה הרבה יותר נחמד מפונקציות טרמפולינה C של פריצות המשתמשות בשדה הנתונים של יישומונים כדי להחזיק מצביע אובייקט בעת שימוש בקוד C ++ עם מוטיב.

המחלקה שתסמן את האירוע צריכה לצפות לאובייקטים שמיישמים את ממשק InterestingEvent ואז להפעיל את שיטת interestEvent () לפי הצורך.

מחלקה ציבורית EventNotifier {private InterestingEvent כלומר; משהו בוליאני פרטי קרה; public EventNotifier (אירוע InterestingEvent) {// שמור את אובייקט האירוע לשימוש מאוחר יותר. כלומר = אירוע; // עדיין אין מה לדווח. משהו קרה = שקר; } // ... public void doWork () {// בדוק את הפרדיקט, שמוגדר במקום אחר. if (somethingHappened) {// איתות על השווה על ידי הפעלת שיטת הממשק. כלומר. עניין מעניין (); } // ...} // ...}

בדוגמה זו השתמשתי בפרדיקט של משהו שקרה כדי לעקוב אחר האם יש להפעיל את האירוע או לא. במקרים רבים עצם העובדה שהשיטה נקראה מספיקה בכדי להצדיק איתות לאירוע המעניין () .

הקוד שרוצה לקבל את הודעת האירוע חייב ליישם את ממשק InterestingEvent ופשוט להעביר התייחסות לעצמו למודיע האירוע.

בכיתה ציבורית CallMe מיישמת את InterestingEvent {private EventNotifier en; צלם CallMe () {// צור את הודעת האירוע והעביר את עצמנו אליו. en = EventNotifier חדש (זה); } // הגדר את המטפל בפועל לאירוע. חלל ציבורי מעניין Event () {// וואו! משהו באמת מעניין בוודאי התרחש! // עשה משהו... } //... }

זה כל מה שיש בזה. אני מקווה להשתמש במושג Java פשוט זה יהפוך את המעבר שלך לג'אווה למעט פחות עצבני.

ג'ון ד 'מיטשל התייעץ ברוב תשע השנים האחרונות ופיתח תוכנת כף יד בשפת הרכבה OO בגיאוורקס. הוא מממן את התמכרותו לג'אווה על ידי כתיבת מהדרים, מערכות Tcl / Tk, C ++ ו- Java. הוא כתב יחד את ספר הג'אווה החדש והלהיט Making Sense of Java וכעת הוא מפתח מהדר ג'אווה.

סיפור זה, "Java Tip 10: Implement routines callback in Java" פורסם במקור על ידי JavaWorld.