Lombok Builder med Custom Setter

1. Introduktion

Project Lombok er et populært Java-bibliotek, der hjælper med at reducere mængden af ​​kedelpladekode, som en udvikler skal skrive.

I denne vejledning ser vi på, hvordan Lombok er @Bygger annotering fungerer, og hvordan vi kan tilpasse den til vores specifikke behov.

2. Maven-afhængighed

Lad os starte med at tilføje afhængigheden af ​​vores pom.xml:

 org.projectlombok lombok 1.18.10 

3. Lombok Bygger Kommentar

Før vi undersøger tilpasning af Lomboks genererede bygherreklasse, lad os tage en hurtig oversigt over, hvordan Lombok @Bygger annotering fungerer. Vi har allerede en fuld introduktion til Lomboks funktioner.

Det @Bygger annotation kan bruges til automatisk at generere en builder til vores klasse. I vores eksempel bruger vi et messaging-system, hvor en bruger kan sende en besked til en anden bruger. Beskeden er enten en simpel tekststreng eller en Fil. Ved hjælp af Lombok kan vi definere vores Besked klasse som følger:

@Builder @Data public class Besked {privat strengafsender; privat modtager af streng; privat strengtekst; privat filfil; }

@Data genererer al kogepladen, der normalt er knyttet til et simpelt POJO (Plain Old Java Object): getters til alle felter, settere til alle ikke-endelige felter og passende toString, lige med og hashCode implementeringer og en konstruktør.

Ved hjælp af den genererede builder kan vi nu generere forekomster af vores Besked klasse:

Beskedbesked = Message.builder () .sender ("[email protected]") .modtager ("[email protected]") .text ("Hvordan har du det i dag?") .Build ();

Det @Bygger annotation understøtter også standardværdier for attributter, men vi går ikke nærmere ind på det nu. Det skal fremgå af dette eksempel, at @Bygger annotering er ret kraftig og kan erstatte en masse kedelpladekode.

4. Tilpasning af Lombok Builders

Det forrige afsnit viste, hvordan vi kan bruge Lombok til at generere en builder-klasse. Men der kan være tilfælde, hvor den genererede bygherre ikke er nok. I vores eksempel har vi en begrænsning om, at meddelelsen kun kan indeholde enten tekst eller en fil. Det kan ikke have begge dele. Lombok ved det selvfølgelig ikke, og den genererede bygherre vil med glæde tillade os at komme ind i den ulovlige tilstand.

Heldigvis kan vi løse dette problem ved at tilpasse bygherren.

At tilpasse en Lombok-builder er enkel og ligetil: vi skriver de dele af bygherren, som vi vil tilpasse, og Lombok @Bygger annotering vil simpelthen ikke generere disse dele. Så i vores eksempel ville det være:

offentlig statisk klasse MessageBuilder {privat strengtekst; privat filfil; offentlig MessageBuilder-tekst (strengtekst) {this.text = tekst; verificereTextOrFile (); returner dette; } offentlig MessageBuilder-fil (filfil) {this.file = fil; verificereTextOrFile (); returner dette; } privat ugyldighed verificereTextOrFile () {if (text! = null && file! = null) {smid nyt IllegalStateException ("Kan ikke sende 'tekst' og 'fil'."); }}}

Bemærk, at vi ikke behøvede at erklære afsender og modtager medlemmer, eller de bygningsmetoder, der er knyttet til dem. Lombok vil stadig generere dem for os.

Hvis vi forsøger at generere en Besked forekomst med både tekst og en fil med følgende kode:

Beskedbesked = Message.builder () .sender ("[email protected]"). Modtager ("[email protected]") .text ("Hvordan har du det i dag?") .Fil (ny fil ("/ sti / til / fil ")) .build ();

Det vil resultere i følgende undtagelse:

Undtagelse i tråden "main" java.lang.IllegalStateException: Kan ikke sende 'tekst' og 'fil'.

5. Konklusion

I denne hurtige artikel så vi på, hvordan man tilpasser Lombok-bygherren.

Som altid er koden tilgængelig på GitHub.