אתחול כפול Java

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

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

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

2. גישה רגילה

בדרך כלל אנו מאתחלים ומאכלסים קבוצה של מדינות באופן הבא:

@ מבחן ציבורי בטל כאשרInitializeSetWithoutDoubleBraces_containsElements () {הגדר מדינות = HashSet חדש (); country.add ("הודו"); country.add ("ברית המועצות"); country.add ("ארה"ב"); assertTrue (מדינות. מכיל ("הודו")); } 

כפי שניתן לראות מהדוגמה לעיל, אנו מבצעים את הפעולות הבאות:

  1. צור מופע של HashSet
  2. הוסף מדינות ל HashSet
  3. לבסוף אנו קובעים אם המדינה נוכחת במדינה HashSet

3. שימוש בסד כפול

עם זאת, אנו יכולים למעשה לשלב את היצירה ואת האתחול באמירה אחת; זה המקום בו אנו משתמשים בסוגריים כפולים:

@ מבחן ציבורי בטל כאשרInitializeSetWithDoubleBraces_containsElements () {Set countries = new HashSet () {{add ("הודו"); הוסף ("ברית המועצות"); הוסף ("ארה"ב"); }}; assertTrue (מדינות. מכיל ("הודו")); } 

כפי שניתן לראות מהדוגמה לעיל, אנו:

  1. יצירת מעמד פנימי אנונימי שמתארך HashSet
  2. מתן חסימת אתחול מופע הקוראת לשיטת ההוספה ומוסיפה את שם המדינה ל- HashSet
  3. לבסוף, אנו יכולים לקבוע אם המדינה נוכחת במדינה HashSet

4. יתרונות השימוש בסוגרים כפולים

ישנם כמה יתרונות פשוטים בשימוש בסוגריים כפולים:

  • פחות שורות קוד בהשוואה לדרך היצירה והאתחול המקורית
  • הקוד קריא יותר
  • אתחול יצירה נעשה באותו ביטוי

5. חסרונות השימוש בסוגרים כפולים

החסרונות בשימוש בסוגריים כפולים הם:

  • דרך לא ברורה ולא ידועה לבצע אתחול
  • זה יוצר שיעור נוסף בכל פעם שאנחנו משתמשים בו
  • אינו תומך בשימוש ב"מפעיל היהלומים "- תכונה שהוצגה בג'אווה 7
  • לא עובד אם הכיתה שאנו מנסים להרחיב מסומנת סופי
  • מחזיק בהתייחסות נסתרת למופע הסוגר, שעלול לגרום לדליפות זיכרון

זה בגלל החסרונות הללו כי אתחול הפלטה הכפולה נחשב כדוגמה נגד דפוס.

6. חלופות

6.1. שיטות מפעל הזרם

במקום זאת, אנו יכולים לעשות שימוש טוב בממשק ה- API החדש של Java 8 Stream כדי לאתחל את ה- מַעֲרֶכֶת:

@Test הציבור בטל כאשרInitializeUnmodifiableSetWithDoubleBrace_containsElements () {Set countries = Stream.of ("הודו", "ברית המועצות", "ארה"ב") .collect (collectionAndThen (toSet (), אוספים :: unmodifiableSet)); assertTrue (מדינות. מכיל ("הודו")); } 

6.2. Java 9 אוספים שיטות מפעל

כמו כן, ג'אווה 9 תביא קבוצה של שיטות מפעל שימושיות שיאפשרו את הפעולות הבאות:

רשימת רשימה = List.of ("הודו", "ברית המועצות", "ארה"ב"); Set set = Set.of ("הודו", "ברית המועצות", "ארה"ב"); 

תוכלו לקרוא על כך במאמר זה.

7. מסקנה

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

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


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