Brug af Lomboks @Builder-kommentar

1. Oversigt

Projekt Lomboks @Bygger er en nyttig mekanisme til brug af Builder-mønsteret uden at skrive kedelpladekode. Vi kan anvende denne kommentar til en Klasse eller en metode.

I denne korte vejledning ser vi på de forskellige brugssager til @Bygger.

2. Maven-afhængigheder

Først skal vi tilføje Project Lombok til vores pom.xml:

 org.projectlombok lombok 1.18.10 

Maven Central har den nyeste version af Project Lombok her.

3. Brug @Bygger på en klasse

I den første brugssag implementerer vi kun en Klasse, og vi vil bruge en bygherre til at oprette forekomster af vores klasse.

Det første og eneste trin er at tilføje kommentaren til klassedeklarationen:

@Getter @Builder public class Widget {privat endelig strengnavn; privat endelig id; } 

Lombok gør alt arbejdet for os. Vi kan nu bygge en Widget og test det:

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

Hvis vi vil oprette kopier eller næsten kopier af objekter, kan vi tilføje ejendommen toBuilder = sandt til @Bygger kommentar:

@Builder (toBuilder = sand) offentlig klasse-widget {// ...}

Dette fortæller Lombok at tilføje en toBuilder () metode til vores Klasse. Når vi påberåber os toBuilder () metode, det returnerer en builder initialiseret med egenskaberne for den forekomst, den kaldes på:

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);

Vi kan se i testkoden, at den bygerklasse, der genereres af Lombok, hedder som vores klasse med "Bygger" vedhæftet det - WidgetBuilder I dette tilfælde. Vi kan derefter ændre de egenskaber, vi ønsker, og bygge () en ny instans.

Hvis vi har brug for at specificere de krævede felter, kan vi bruge kommentarkonfigurationen til at oprette en hjælpebygger:

@Builder (builderMethodName = "internalBuilder") offentlig klasse RequiredFieldAnnotation {@NonNull privat strengnavn; privat streng beskrivelse; offentlig statisk RequiredFieldAnnotationBuilder builder (String name) {return internalBuilder (). name (name); }}

I dette tilfælde skjuler vi standardindstillingen Bygger som internalBuilder og skabe vores egne. Når vi opretter bygherren, skal vi således angive den krævede parameter:

RequiredField.builder ("NameField"). Beskrivelse ("Field Description"). Build ();

For at sikre, at vores felt eksisterer, kan vi også tilføje @NonNull kommentar.

4. Brug @Bygger på en metode

Antag, at vi bruger et objekt, som vi vil konstruere med en bygherre, men vi kan ikke ændre kilden eller udvide Klasse.

Lad os først oprette et hurtigt eksempel ved hjælp af Lomboks @Value-kommentar:

@Value endelig klasse ImmutableClient {privat int id; privat strengnavn; }

Nu har vi en endeligKlasse med to uforanderlige medlemmer, getters til dem og en alt-argument konstruktør.

Vi dækkede, hvordan man bruger @Bygger på en Klasse, men vi kan også bruge det til metoder. Vi bruger denne evne til at omgå ikke at være i stand til at ændre eller udvide Uforanderlig klient.

Dernæst opretter vi en ny klasse med en metode til oprettelse af ImmutableClients:

klasse ClientBuilder {@Builder (builderMethodName = "builder") offentlig statisk ImmutableClient newClient (int id, String name) {return new ImmutableClient (id, name); }}

Denne kommentar opretter en metode, der hedder Bygger() at returnerer a Bygger for at skabe Uforanderlige klienter.

Lad os nu bygge en Uforanderlig klient:

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

5. Konklusion

I denne artikel brugte vi Lomboks @Bygger kommentar om en metode til at oprette en builder til en endeligKlasse, og vi så, hvordan man lavede noget af Klasse felter, der kræves.

Kodeprøver kan som altid findes på GitHub.