Stop Alla verbosità del Java con Lombok

S

iNTRODUZIONe

Java si presenta come un linguaggio molto espressivo, fortemente tipizzato e strutturato al costo però di essere molto verboso.  Un buon programmatore Java che vuol rispettare il principio di incapsulamento nello sviluppo di un bean  è costretto a scrivere molto codice  per i getter e setter delle proprietà private, per i costruttori e magari per i builder se fa uso di questo pattern. Queste parti di codice sono solitamente senza logiche di business ma necessarie per garantire i principi del paradigma OOP. Per questo motivo vengono spesso autogenerate manualmente da funzionalità degli IDE.

Tuttavia leggere una classe di un semplice model con più di 100 linee di codice risulta essere comunque fastidioso  ed inoltre ogni volta che viene aggiunto o rimosso una proprietà nel bean occorre rigenerare i getter/setter, costruttore e builder. Questo risulta essere poco produttivo e produce un codice molto verboso.

LOMBOK

La soluzione a tutta questa verbosità è la libreria Lombok. La libreria lavora utilizzando delle annotation sopra la classe le quali comandano il compilatore in fase di build la generazione di codice aggiuntivo associato alla specifica annotation utilizzata. Essendo codice generato in fase di build consiglio di installare il plugin di lombok nel vostro IDE (LINK ECLIPSE , LINK INTELLIJ) per non far sottolineare in rosso dal vostro IDE l’utilizzo di metodi autogenerati come getter o setter. Mostriamo la potenza di Lombok con un esempio pratico.

SETUP

La dipendenza di Lombok è disponibile sia per Maven che Gradle. Nel nostro esempio utilizzeremo Maven.

<dependencies>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.16</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

ESEMPIO

Supponiamo di avere un bean User

@Getter @Setter @NoArgsConstructor @ToString @EqualsAndHashCode @AllArgsConstructor
public class User implements Serializable {
 
 
    private String firstName;
    private String lastName;
    private int age;
 
}

Come potete vedere il bean User ha pochissime linee di codice ma grazie alle annotation di Lombok  utilizzate avrà tutti i metodi di un normale bean che rispetta i principi di incapsulamento:

  • @Getter e @Setter: getter e setter per ogni proprietà del bean con nomenclatura standard ( es. getFirstname,setFirstname)
  • @NoArgsConstructor: costruttore vuoto
  • @ToString: implementazione del metodo toString
  • @EqualsAndHashCode: implementazione del metodo equals e hashcode
  • @AllArgsConstructor: costruttore con tutti i campi della classe: public User (String firstname, String lastname,int age)

I metodi autogenerati da Lombok potranno essere utilizzati all’interno del tuo progetto senza alcuna restrinzione come se tu li avessi scritti a mano o autogenerati dal tuo IDE.

CONCLUSIONE

Grazie a Lombok siamo riusciti a ridurre un semplice bean di 50 righe di codice in una decina senza perdere nessun metodo del bean. Questo aumenta notevolmente la produttività del programmatore permettendogli di concentrarsi esclusivamente sulla logica di business producendo un codice meno verboso e più limpido, diminuendo inoltre il costo di manutenzione del bean ( se viene aggiunto un nuovo campo al bean ci penserà Lombok a creare i relativi metodi di getter e setter e ad aggiornare il costruttore).

Lombok offre un alto livello di configurabilità per customizzare il codice autogenerato dalle annotation . Per maggiori dettagli su configurazioni aggiuntive e per la documentazione delle altre annotation rimandiamo alla pagina ufficiale di questa fantastica libreria:  LINK

 

A proposito di me

Dario Frongillo

Software architect con un forte background in Java, Architettura REST, framework Spring , Database Design,progettazione e sviluppo di SPA e RIA Web application con framework Javascript. Attualmente mi occupo di sviluppo soluzioni software in ambito Banking e Finance: in particolare progettazione e sviluppo di applicativi web based per la realizzazione di sistemi di trading, interfacce con i mercati finanziari e di servizi real time.

Gli articoli più letti

Articoli recenti

Commenti recenti