A Lombok @Builder Annotation használata

1. Áttekintés

Projekt Lombok's @Építész egy hasznos mechanizmus a Builder minta használatához anélkül, hogy írnánk a kazánlap kódját. Ezt az annotációt alkalmazhatjuk a Osztály vagy egy módszer.

Ebben a rövid bemutatóban megvizsgáljuk a különböző felhasználási eseteket @Építész.

2. Maven-függőségek

Először hozzá kell adnunk a Lombok projektet a mi programunkhoz pom.xml:

 org.projectlombok lombok 1.18.10 

A Maven Central itt található a Project Lombok legújabb verziójával.

3. Használata @Építész osztályon

Első használat esetén csupán a Osztály, és egy építővel szeretnénk létrehozni osztályunk példányait.

Az első és egyetlen lépés az, hogy hozzá kell adni az annotációt az osztálydeklarációhoz:

@Getter @Builder public class Widget {private final String name; private final int id; } 

Lombok az összes munkát elvégzi helyettünk. Most építhetünk egy Widget és tesztelje:

Widget testWidget = Widget.builder () .name ("foo") .id (1) .build (); assertThat (testWidget.getName ()) .isEqualTo ("foo"); assertThat (testWidget.getId ()) .isEqualTo (1);

Ha objektumok másolatát vagy majdnem másolatát akarjuk létrehozni, hozzáadhatjuk a tulajdonságot toBuilder = igaz hoz @Építész annotáció:

@Builder (toBuilder = true) public class Widget {// ...}

Ez azt mondja Lomboknak, hogy adjon hozzá egy toBuilder () módszer a mi Osztály. Amikor a toBuilder () módszer, azt egy olyan építőt ad vissza, amely inicializálja a meghívott példány tulajdonságait:

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

Láthatjuk a tesztkódban, hogy a Lombok által generált építő osztályt úgy nevezik el, mint az osztályunkat "Építész" hozzáfűzve - WidgetBuilder ebben az esetben. Ezután módosíthatjuk a kívánt tulajdonságokat és épít() egy új példány.

Ha meg kell adnunk a kötelező mezőket, akkor a feliratozás konfigurációjával létrehozhatunk egy kiegészítő készítőt:

@Builder (builderMethodName = "internalBuilder") public class RequiredFieldAnnotation {@NonNull private String name; privát karakterlánc leírása; public static RequiredFieldAnnotationBuilder builder (String name) {return internalBuilder (). név (név); }}

Ebben az esetben rejtegetjük az alapértelmezettet építész mint internalBuilder és létrehozni a sajátunkat. Így amikor elkészítjük az építőt, meg kell adnunk a szükséges paramétert:

RequiredField.builder ("NameField"). Leírás ("Mező leírása"). Build ();

Továbbá, hogy megbizonyosodjunk a mezőnk létezéséről, hozzáadhatjuk a @NonNull annotáció.

4. Használata @Építész egy módszerről

Tegyük fel, hogy olyan objektumot használunk, amelyet építővel szeretnénk megépíteni, de mi nem tudja módosítani a forrást vagy kibővíteni a fájlt Osztály.

Először készítsünk egy gyors példát a Lombok @Value feliratával:

@Value final class ImmutableClient {private int id; privát karakterlánc neve; }

Most van egy végsőOsztály két megváltoztathatatlan taggal, számukra getterekkel és egy minden érvet felépítő konstruktorral.

Kitértünk a használat módjára @Építész rajta Osztály, de használhatjuk módszerekre is. Ezt a képességet arra használjuk, hogy elkerüljük a módosítást vagy a bővítést ImmutableClient.

Ezután létrehozunk egy új osztályt az ImmutableClients létrehozásának módszerével:

class ClientBuilder {@Builder (builderMethodName = "builder") public static ImmutableClient newClient (int id, String name) {return new ImmutableClient (id, name); }}

Ez a feljegyzés létrehoz egy nevű metódust építész() hogy visszatér a Építész az alkotáshoz ImmutableClients.

Most építsünk egy ImmutableClient:

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

5. Következtetés

Ebben a cikkben a Lombokét használtuk @Építész megjegyzés a metódus létrehozásához a végsőOsztály, és láttuk, hogyan készítsünk néhányat a Osztály kötelező mezők.

A kódminták, mint mindig, a GitHubon találhatók.