Per la gioia dei pigri
Già da diverso tempo utilizzo, sia per lavoro che per hobby, una libreria open source denominata Lombok: il nome richiama un’isola indonesiana dove tutti si trasferirebbero volentieri. In realtà è una utility che fa risparmiare tempo allo sviluppatore pigro (come me) e maniaco della pulizia del codice.
La libreria è un Annotation processor (APT), quindi durante la compilazione del progetto, farà l’interpretazione delle annotation (@NomeAnnotazione per intenderci) e eseguirà delle operazioni o semplicemente sostituirà il nostro codice con qualcos’altro durante la generazione della classe. La libreria è open source ed è possibile includerla nei progetti a scopi commerciali.
Come utilizzare Lombok
Supponiamo di dover creare un nuovo bean POJO (Plain Old Java Object), quindi che ha delle proprietà interrogabili. Senza Lombok scriveremo il nostro codice in questo modo:
public class Sfera implements Serializable { //Definisco il diametro private int diametro; [...] //Definisco il getter public int getDiametro() { return this.diametro; } public void setDiamentro(int value) { this.diamentro = value; } }
Niente di nuovo in questo codice, tutti i programmatori Java sono abituati a vederlo giornalmente, ma a mio parere una classe con 10 proprietà diventa lunga e difficile da mantenere. Qui entra in gioco Lombok: una volta installato (trovi le istruzioni in fondo all’articolo), potremo eliminare i nostri getter/setter e sostituirli con due semplici annotazioni:
public Sfera class implements Serializable { //Definisco il diamentro @Getter @Setter // <-- Lombok private int diamentro; }
Automaticamente, durante la compilazione, Lombok genera per noi getter e setter e il nostro codice rimane più pulito. Inoltre questi metodi saranno accessibili anche sull’IDE. Bene, ma io sono molto pigro e non voglio scrivere e ripetere le annotazioni @Getter
e @Setter
su tutte le proprietà! Esiste un’altra annotazione chiamata @Data
che genera tutti i getter/setter per le proprietà, basta annotare la classe coinvolta, in questo modo:
@Data public Sfera class implements Serializable { //Definisco il diamentro private int diamentro; }
Automaticamente sull’IDE ci troveremo i getter/setter gia dichiarati
Sfera sfera = new Sfera(); sfera.setDiametro(3); System.out.println("Il diametro della sfera è " + sfera.getDiametro());
Facile e veloce, no? Un’altra annotazione utilissima è @AllArgsConstructor
che agisce sul costruttore della classe. Riprendiamo la nostra classe Sfera senza Lombok, aggiungendo qualche proprietà:
@Data public Sfera class implements Serializable { private String nome; private int diametro; private String colore; //Costruttore della classe public Sfera(String nome, int diametro, String colore) { this.nome = nome; this.diametro = diametro; this.colore = colore; } }
Se aggiungiamo l’annotazione @AllArgsConstructor
sulla classe (oltre a @Data
) possiamo omettere il costruttore che usa tutti i parametri della classe, ci penserà Lombok a generarlo per noi:
@Data @AllArgConstructor public Sfera class implements Serializable { private String nome; private int diametro; }
L’annotazione @Log
Avendo bisogno continuamente di vedere che cosa sta facendo il nostro programma, immagino che il codice sotto sia familiare:
import java.util.logging.Logger; public class ContenitoreDiSfere { // Dichiaro il logger (java.util.logging.logger) private static log = Logger.getLogger(ContentitoreDiSfere.class.getName()); public ContenitoreDiSfere() { log.info("OK, io sono pronto!"); } }
Anche in questo caso Lombok ci fa risparmiare tempo e codice con l’annotazione @Log
. Questa annotazione scritta sopra alla classe dichiara la variabile (statica) log
:
@Log public class ContenitoreDiSfere { public ContenitoreDiSfere() { log.info("OK, io sono pronto!"); } }
La domanda sorge spontanea: “Ma se io volessi utilizzare un altro logger?” Semplice: possiamo cambiare annotazione e utilizzare gli altri logger standard. Ovviamente le varie librerie dovranno essere opportunamente referenziate e disponibili nelle librerie o nel pom.xml
se si usa . Qui sotto riportiamo il mapping tra annotazione e corrispondente logger:
- @Logj4: org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
- @CommonsLog: org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
- @Log4J2 (versione 2 di log4j): org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
- @Slf4J: org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
- @XSlf4j: org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
Installare Lombok
- Per Eclipse: scaricato , fai doppio click sul file e si aprirà l’interfaccia di setup. Questa mostrerà tutte le versioni di Eclipse installate sul computer. E’ possibile selezionarle premere “Installa”. Una volta ravviato Eclipse, Lombok è pronto all’uso.
- Per IntelliJ IDEA: scarica e installa il plugin dal repository ufficiale
- Per : aggiungi questa dipendenza nel file
pom.xml
:
org.projectlombok lombok 1.12.4 provided
Conclusione
Lombok offre molte utility che ti fanno risparmiare le solite ripetitive righe di codice. A mio avviso può diventare un buon compagno di hobby e lavoro, senza creare scompiglio e incompatibilità con il codice esistente.