Lombok Builder s vlastným setrom

1. Úvod

Project Lombok je populárna knižnica Java, ktorá pomáha znižovať množstvo štandardných kódov, ktoré musí vývojár napísať.

V tomto tutoriáli sa pozrieme na to, ako je na tom Lombok @Builder anotácia funguje a ako ju môžeme prispôsobiť pre naše konkrétne potreby.

2. Závislosť od Maven

Začnime pridaním závislosti do našej pom.xml:

 org.projectlombok lombok 1.18.10 

3. Lombok Staviteľ Anotácia

Predtým, ako sa pozrieme na prispôsobenie generovanej triedy staviteľov Lomboku, urobme si krátku rekapituláciu toho, ako Lombok @Builder anotácia funguje. Už máme úplné predstavenie funkcií Lomboku.

The @Builder anotáciu možno použiť na automatické generovanie nástroja na tvorbu triedy pre našu triedu. V našom príklade použijeme systém správ, kde jeden používateľ môže poslať správu inému používateľovi. Správa je buď jednoduchý textový reťazec, alebo Súbor. Pomocou Lomboku môžeme definovať našu Správa triedy nasledovne:

@Builder @Data verejná trieda Správa {private String sender; súkromný príjemca reťazcov; súkromný textový reťazec; súkromný spisový súbor; }

@ Údaje generuje všetky základné údaje, ktoré sú za normálnych okolností spojené s jednoduchým POJO (obyčajný starý objekt Java): getre pre všetky polia, setre pre všetky nedefinované polia a vhodné natiahnuť, rovná sa a hashCode implementácie a konštruktor.

Pomocou vygenerovaného nástroja na generovanie môžeme teraz generovať inštancie nášho Správa trieda:

Správa message = Message.builder () .sender ("[chránený e-mailom]") .recipient ("[chránený e-mailom]") .text ("Ako sa dnes máte?") .Build ();

The @Builder anotácia tiež podporuje predvolené hodnoty pre atribúty, ale teraz sa tým nebudeme zaoberať. Z tohto príkladu by malo byť zrejmé, že: @Builder anotácia je dosť silná a môže nahradiť veľa štandardného kódu.

4. Prispôsobenie staviteľov Lomboku

Predchádzajúca časť ukázala, ako môžeme pomocou Lomboku vygenerovať triedu staviteľov. Môžu sa však vyskytnúť prípady, keď vygenerovaný builder nestačí. V našom príklade máme obmedzenie, že správa môže obsahovať iba text alebo súbor. Nemôže mať oboje. Lombok to samozrejme nevie a vygenerovaný staviteľ nám s radosťou umožní dostať sa do tohto nelegálneho stavu.

Našťastie môžeme tento problém vyriešiť prispôsobením staviteľa.

Prispôsobenie staviteľa Lomboku je jednoduché a priame: píšeme časti staviteľa, ktoré chceme prispôsobiť, a Lombok @Builder anotácia jednoducho tieto časti nevygeneruje. V našom príklade by to teda bolo:

verejná statická trieda MessageBuilder {súkromný text reťazca; súkromný spisový súbor; public MessageBuilder text (text reťazca) {this.text = text; verifyTextOrFile (); vráťte to; } verejný súbor MessageBuilder (súbor súboru) {this.file = súbor; verifyTextOrFile (); vráťte to; } private void verifyTextOrFile () {if (text! = null && file! = null) {throw new IllegalStateException ("Cannot send 'text' and 'file'."); }}}

Upozorňujeme, že sme nemuseli deklarovať odosielateľ a príjemca členovia alebo metódy staviteľa s nimi spojené. Lombok ich bude stále generovať.

Ak sa pokúsime vygenerovať a Správa inštancia s textom aj so súborom s nasledujúcim kódom:

Správa message = Message.builder () .sender ("[chránený e-mailom]") .recipient ("[chránený e-mailom]") .text ("Ako sa dnes máte?") .File (nový súbor ("/ cesta / k / súbor ")) .build ();

Výsledkom bude táto výnimka:

Výnimka vo vlákne "main" java.lang.IllegalStateException: Nie je možné odoslať 'text' a 'súbor'.

5. Záver

V tomto rýchlom článku sme sa pozreli na to, ako prispôsobiť staviteľ Lombok.

Ako vždy, kód je k dispozícii na GitHub.


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