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.