Lombok Builder met aangepaste setter

1. Inleiding

Project Lombok is een populaire Java-bibliotheek om de hoeveelheid standaardcode die een ontwikkelaar moet schrijven, te verminderen.

In deze tutorial bekijken we hoe Lombok's @Bouwer annotatie werkt en hoe we deze kunnen aanpassen aan onze specifieke behoeften.

2. Maven Afhankelijkheid

Laten we beginnen met het toevoegen van de afhankelijkheid aan onze pom.xml:

 org.projectlombok lombok 1.18.10 

3. Lombok Bouwer Annotatie

Voordat we kijken naar het aanpassen van de door Lombok gegenereerde builder-klasse, laten we een korte samenvatting geven van hoe de Lombok @Bouwer annotatie werkt. We hebben al een volledige introductie in de functies van Lombok.

De @Bouwer annotatie kan worden gebruikt om automatisch een builder voor onze klas te genereren. Voor ons voorbeeld gebruiken we een berichtensysteem waarbij de ene gebruiker een bericht naar een andere gebruiker kan sturen. Het bericht is een eenvoudige tekstreeks of een het dossier. Met behulp van Lombok kunnen we onze Bericht klasse als volgt:

@Builder @Data openbare klasse Bericht {privé String-afzender; private String-ontvanger; private String-tekst; privé-bestandsbestand; }

@Gegevens genereert alle standaardplaat die normaal gesproken wordt geassocieerd met een eenvoudig POJO (Plain Old Java Object): getters voor alle velden, setters voor alle niet-definitieve velden en geschikt toString, is gelijk aan en hashCode implementaties en een constructor.

Met behulp van de gegenereerde builder kunnen we nu exemplaren van onze Bericht klasse:

Message message = Message.builder () .sender ("[email protected]") .recipient ("[email protected]") .text ("Hoe gaat het vandaag?") .Build ();

De @Bouwer annotatie ondersteunt ook standaardwaarden voor attributen, maar daar gaan we nu niet op in. Uit dit voorbeeld moet duidelijk zijn dat de @Bouwer annotatie is vrij krachtig en kan veel standaardcode vervangen.

4. Lombok Builders aanpassen

De vorige sectie liet zien hoe we Lombok kunnen gebruiken om een ​​builder class te genereren. Maar er kunnen gevallen zijn waarin de gegenereerde builder niet genoeg is. In ons voorbeeld hebben we een beperking dat het bericht alleen tekst of een bestand mag bevatten. Het kan niet beide hebben. Lombok weet dat natuurlijk niet en de gegenereerde bouwer zal ons graag in die illegale staat toelaten.

Gelukkig kunnen we dit probleem aanpakken door de bouwer aan te passen.

Het aanpassen van een Lombok-bouwer is eenvoudig en duidelijk: we schrijven de onderdelen van de bouwer die we willen aanpassen en de Lombok @Bouwer annotatie zal die delen simpelweg niet genereren. Dus in ons voorbeeld zou dat zijn:

openbare statische klasse MessageBuilder {privé String-tekst; privé-bestandsbestand; openbare MessageBuilder-tekst (String-tekst) {this.text = text; verifiërenTextOrFile (); dit teruggeven; } openbaar MessageBuilder-bestand (bestandsbestand) {this.file = bestand; verifiërenTextOrFile (); dit teruggeven; } private void verifyTextOrFile () {if (text! = null && file! = null) {throw new IllegalStateException ("Kan 'tekst' en 'bestand' niet verzenden."); }}}

Houd er rekening mee dat we het afzender en ontvanger leden, of de bouwer-methoden die daarmee zijn geassocieerd. Lombok zal die nog steeds voor ons genereren.

Als we proberen een Bericht instantie met zowel tekst als een bestand met de volgende code:

Message message = Message.builder () .sender ("[email protected]") .recipient ("[email protected]") .text ("Hoe gaat het vandaag?") .File (nieuw bestand ("/ path / to / file ")) .build ();

Het zal resulteren in de volgende uitzondering:

Uitzondering in thread "main" java.lang.IllegalStateException: Kan 'tekst' en 'bestand' niet verzenden.

5. Conclusie

In dit korte artikel hebben we gekeken hoe we de Lombok-builder kunnen aanpassen.

Zoals altijd is de code beschikbaar op GitHub.