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.