באמצעות ההערה @Builder של לומבוק

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

הפרויקט של לומבוק @בּוֹנֶה הוא מנגנון שימושי לשימוש בתבנית Builder ללא כתיבת קוד boilerplate. אנו יכולים להחיל הערה זו על א מעמד או שיטה.

במדריך קצר זה, נבחן את מקרי השימוש השונים עבור @בּוֹנֶה.

2. תלות Maven

ראשית, עלינו להוסיף את פרויקט לומבוק לזו שלנו pom.xml:

 org.projectlombok lombok 1.18.10 

ל- Maven Central יש את הגרסה האחרונה של Project Lombok כאן.

3. שימוש @בּוֹנֶה בשיעור

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

הצעד הראשון והיחיד הוא להוסיף את ההערה להצהרת הכיתה:

@Getter @Builder מחלקה ציבורית יישומון {שם מחרוזת סופי פרטי; מזהה פרטי גמר פרטי; } 

לומבוק עושה את כל העבודה בשבילנו. כעת נוכל לבנות א יישומון ולבדוק את זה:

יישומון testWidget = Widget.builder () .name ("foo") .id (1) .build (); assertThat (testWidget.getName ()) .isEqualTo ("foo"); assertThat (testWidget.getId ()) .isEqualTo (1);

אם אנו רוצים ליצור עותקים או כמעט עותקים של אובייקטים, נוכל להוסיף את המאפיין toBuilder = נכון אל ה @בּוֹנֶה ביאור:

@Builder (toBuilder = true) יישומון מחלקה ציבורי {// ...}

זה אומר לומבוק להוסיף א toBuilder () שיטה שלנו מעמד. כאשר אנו קוראים את toBuilder () שיטה, זה מחזיר בונה מאותחל עם תכונות המופע אליו הוא נקרא:

יישומון testWidget = Widget.builder () .name ("foo") .id (1) .build (); Widget.WidgetBuilder widgetBuilder = testWidget.toBuilder (); יישומון newWidget = widgetBuilder.id (2) .build (); assertThat (newWidget.getName ()) .isEqualTo ("foo"); assertThat (newWidget.getId ()) .isEqualTo (2);

אנו יכולים לראות בקוד הבדיקה כי מחלקת הבונים שנוצרה על ידי לומבוק נקראת כמו המחלקה שלנו עם "בּוֹנֶה" צורף לזה - WidgetBuilder במקרה הזה. לאחר מכן נוכל לשנות את המאפיינים שאנו רוצים ו לִבנוֹת() מופע חדש.

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

@Builder (builderMethodName = "internalBuilder") מחלקה ציבורית RequiredFieldAnnotation {@NonNull שם פרטי מחרוזת; תיאור מחרוזת פרטי; סטטי ציבורי בונה RequiredFieldAnnotationBuilder (שם מחרוזת) {return internalBuilder (). name (name); }}

במקרה זה, אנו מסתירים את ברירת המחדל בּוֹנֶה כפי ש internalBuilder ויוצרים משלנו. לפיכך, כשאנחנו יוצרים את הבנאי, עלינו לספק את הפרמטר הנדרש:

RequiredField.builder ("NameField"). תיאור ("תיאור שדה"). Build ();

כמו כן, כדי לוודא שהתחום שלנו קיים, אנחנו יכולים להוסיף את @NonNull ביאור.

4. שימוש @בּוֹנֶה על שיטה

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

ראשית, בואו ניצור דוגמה מהירה באמצעות הערת @Value של Lombok:

@Value הכיתה הסופית ImmutableClient {מזהה פרטי פרטי; שם מחרוזת פרטי; }

עכשיו יש לנו סופימעמד עם שני חברים בלתי ניתנים לשינוי, גטררים עבורם ובונה כל הוויכוחים.

סקרנו כיצד להשתמש @בּוֹנֶה על מעמד, אבל אנחנו יכולים להשתמש בזה גם בשיטות. נשתמש ביכולת זו כדי לעקוף את האפשרות שלא לשנות או להרחיב ImmutableClient.

לאחר מכן, ניצור מחלקה חדשה עם שיטה ליצירת ImmutableClients:

class ClientBuilder {@Builder (builderMethodName = "builder") ציבורי סטטי ImmutableClient newClient (int id, שם מחרוזת) {להחזיר ImmutableClient חדש (id, name); }}

ביאור זה יוצר שיטה בשם בּוֹנֶה() זֶה מחזירה א בּוֹנֶה ליצירה לקוחות בלתי ניתנים לשינוי.

עכשיו, בואו נבנה ImmutableClient:

ImmutableClient testImmutableClient = ClientBuilder.builder () .name ("foo") .id (1) .build (); assertThat (testImmutableClient.getName ()) .isEqualTo ("foo"); assertThat (testImmutableClient.getId ()) .isEqualTo (1);

5. מסקנה

במאמר זה השתמשנו בלומבוק @בּוֹנֶה ביאור על שיטה ליצור בונה עבור סופימעמד, וראינו איך להכין חלק מה- מעמד שדות חובה.

דוגמאות קוד, כמו תמיד, ניתן למצוא באתר GitHub.


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