Používanie anotácie spoločnosti Lombok @Builder
1. Prehľad
Projekt Lombok @Builder je užitočný mechanizmus na použitie vzoru Builder bez nutnosti písania kódu štandardného štítku. Túto anotáciu môžeme použiť na a Trieda alebo metóda.
V tomto krátkom tutoriáli sa pozrieme na rôzne prípady použitia @Builder.
2. Maven závislosti
Najskôr musíme pridať Project Lombok do nášho pom.xml:
org.projectlombok lombok 1.18.10
Maven Central má najnovšiu verziu projektu Lombok.
3. Používanie @Builder v triede
V prvom prípade použitia iba implementujeme a Triedaa chceme použiť inštančný nástroj na vytváranie inštancií našej triedy.
Prvým a jediným krokom je pridanie anotácie k deklarácii triedy:
@Getter @Builder verejná trieda Widget {súkromné konečné meno reťazca; súkromné konečné ID; }
Lombok robí všetku prácu za nás. Teraz môžeme postaviť Widget a otestujte to:
Widget testWidget = Widget.builder () .name ("foo") .id (1) .build (); assertThat (testWidget.getName ()) .isEqualTo ("foo"); assertThat (testWidget.getId ()) .isEqualTo (1);
Ak chceme vytvárať kópie alebo blízke kópie objektov, môžeme pridať vlastnosť toBuilder = true do @Builder anotácia:
@Builder (toBuilder = true) Widget verejnej triedy {// ...}
Toto hovorí Lomboku, aby pridal a toBuilder () metóda k našej Trieda. Keď vyvoláme toBuilder () metóda vráti staviteľ inicializovaný vlastnosťami inštancie, na ktorú sa volá:
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);
V testovacom kóde vidíme, že trieda staviteľov generovaná Lombokom je pomenovaná ako naša trieda, s „Staviteľ“ pripojený k tomu - WidgetBuilder v tomto prípade. Potom môžeme upraviť vlastnosti, ktoré si prajeme a build () nová inštancia.
Ak potrebujeme určiť povinné polia, môžeme pomocou konfigurácie anotácií vytvoriť pomocný nástroj na tvorbu:
@Builder (builderMethodName = "internalBuilder") verejná trieda RequiredFieldAnnotation {@NonNull súkromné meno reťazca; popis súkromného reťazca; public static RequiredFieldAnnotationBuilder builder (názov reťazca) {return internalBuilder (). name (name); }}
V tomto prípade skrývame predvolené nastavenie staviteľ ako internalBuilder a vytváranie vlastných. Keď teda vytvárame stavač, musíme poskytnúť požadovaný parameter:
RequiredField.builder ("NameField"). Description ("Field Field"). Build ();
Aby sme sa uistili, že naše pole existuje, môžeme pridať znak @NonNull anotácia.
4. Používanie @Builder na metóde
Predpokladajme, že používame objekt, ktorý chceme skonštruovať pomocou staviteľa, ale my sk Nemôžem upraviť zdroj ani rozšíriť Trieda.
Najprv si vytvoríme rýchly príklad pomocou anotácie @Value od Lomboku:
@Value konečná trieda ImmutableClient {private int id; súkromné meno reťazca; }
Teraz máme konečnéTrieda s dvoma nezmeniteľnými členmi, getrami pre nich a konštruktorom všetkých argumentov.
Pokryli sme, ako sa používa @Builder na a Trieda, ale môžeme ho použiť aj na metódy. Túto schopnosť využijeme na to, aby sme neboli schopní upravovať alebo rozširovať ImmutableClient.
Ďalej vytvoríme novú triedu s metódou vytvárania ImmutableClients:
trieda ClientBuilder {@Builder (builderMethodName = "staviteľ") verejná statická ImmutableClient newClient (int id, názov reťazca) {return new ImmutableClient (id, name); }}
Táto anotácia vytvára metódu s názvom staviteľ () že vracia a Staviteľ na tvorenie Nezmeniteľní klienti.
Poďme si postaviť ImmutableClient:
ImmutableClient testImmutableClient = ClientBuilder.builder () .name ("foo") .id (1) .build (); assertThat (testImmutableClient.getName ()) .isEqualTo ("foo"); assertThat (testImmutableClient.getId ()) .isEqualTo (1);
5. Záver
V tomto článku sme použili Lombok @Builder anotácia metódy vytvorenia nástroja na tvorbu a konečnéTrieda, a videli sme, ako vyrobiť niektoré z Trieda povinné polia.
Ukážky kódu, ako vždy, nájdete na GitHub.