סוג ההחזרה השוטף בג'אווה

1. סקירה כללית

במדריך זה, אנו נסתכל מקרוב על סוג ההחזר הקובריטיבי ב- Java. לפני שנבדוק את המשתנות מנקודת המבט של סוג ההחזרה, בואו נראה מה זה אומר.

2. משתנות

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

בואו ניקח בחשבון כמה דוגמאות בסיסיות של משתנות:

רשימת integerList = ArrayList חדש (); רשימת doubleList = ArrayList חדש ();

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

3. סוג ההחזר השוטף

ה סוג החזרה המשותף הוא - כאשר אנו עוקפים שיטה - מה שמאפשר לסוג ההחזרה להיות סוג המשנה של סוג השיטה שנדרסה.

כדי להוציא את זה לפועל, בואו ניקח פשוט יַצרָן כיתה עם א ליצר() שיטה. כברירת מחדל, הוא מחזיר a חוּט כמו לְהִתְנַגֵד כדי לספק גמישות לשיעורי הילדים:

מחלקה ציבורית מפיק {ייצור ציבורי ציבורי (קלט מחרוזת) {תוצאת אובייקט = input.toLowerCase (); תוצאת החזרה; }}

כתוצאה מה- לְהִתְנַגֵד כסוג החזרה, אנו יכולים לקבל סוג החזרה קונקרטי יותר בכיתת הילדים. זה יהיה סוג ההחזרה המשתנה וייצור מספרים מרצפי התווים:

מחלקה ציבורית IntegerProducer מרחיב את המפיק {@Override Public Integer public (קלט מחרוזת) {return Integer.parseInt (קלט); }}

4. השימוש במבנה

הרעיון המרכזי שעומד מאחורי סוגי ההחזרות השונות הוא לתמוך בחילוף ליסקוב.

לדוגמא, נבחן את תרחיש המפיק הבא:

@ מבחן ציבורי בטל כאשרInputIsArbitrary_thenProducerProducesString () {String arbitraryInput = "רק טקסט אקראי"; מפיק מפיק = מפיק חדש (); אובייקט objectOutput = producer.produce (קלט arbitrary); assertEquals (Input arbitrary, objectOutput); assertEquals (String.class, objectOutput.getClass ()); }

לאחר שינוי ל- IntegerProducerההיגיון העסקי שמייצר את התוצאה בפועל יכול להישאר זהה:

@ מבחן ציבורי בטל כאשרInputIsSupported_thenProducerCreatesInteger () {String integerAsString = "42"; מפיק מפיק = IntegerProducer חדש (); תוצאת אובייקט = producer.produce (integerAsString); assertEquals (Integer.class, result.getClass ()); assertEquals (Integer.parseInt (integerAsString), תוצאה); }

עם זאת, אנו עדיין מפנים את התוצאה באמצעות לְהִתְנַגֵד. בכל פעם שאנחנו מתחילים להשתמש בהתייחסות מפורשת ל- שלם מפיק, אנו יכולים לאחזר את התוצאה כ- מספר שלם מבלי להפיל:

@Test ציבורי בטל כאשרInputIsSupported_thenIntegerProducerCreatesIntegerWithoutCasting () {String integerAsString = "42"; מפיק IntegerProducer = IntegerProducer חדש (); תוצאה שלמה = producer.produce (integerAsString); assertEquals (Integer.parseInt (integerAsString), תוצאה); }

תרחיש ידוע הוא לְהִתְנַגֵד#שיבוט שיטה, המחזירה לְהִתְנַגֵד כברירת מחדל. בכל פעם שאנחנו עוקפים את שיבוט () השיטה, המתקן של סוגי ההחזרות המשתנים מאפשר לנו לקבל אובייקט החזרה קונקרטי יותר מ- לְהִתְנַגֵד את עצמה.

5. מסקנה

במאמר זה ראינו מהם סוגי ההשתנות והשניות המשותף וכיצד הם מתנהגים בג'אווה.

כמו תמיד, הקוד זמין ב- GitHub.


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