Lombok ou “Project Lombok” est une bibliothèque Java qui permet de générer du code à notre place grâce à des annotations.
À travers ces fameuses annotations, Lombok nous permet d’automatiquement générer les indispensables Getters, Setters, Constructor, etc .. Que nous retrouvons toujours dans des classes d’objets et métiers d’une application.
Installation de Lombok avec Maven :
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
Version 1.18.20 du 2 Avril 2021
Installation de Lombok avec Gradle :
implementation 'org.projectlombok:lombok:1.18.20'
Version 1.18.20 du 2 Avril 2021
Vous pouvez vérifier les dernières versions de Lombok sur le site search.maven.org
Utilisation de Lombok :
Prenons pour exemple une simple classe objet Java qui contient : firstname, lastname, address:
public class User {
private String firstName;
private String lastName;
private String address;
public User() {
// Constructor vide
}
public User(final String firstName, final String lastName, final String address) {
this.firstName = firstName;
this.lastName = lastName;
this.address = address;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", address='" + address + '\'' +
'}';
}
}
Cette classe est très simple, comporte peu de choses mais pourtant compte 49 lignes.
Voyons maintenant avec notre ami Lombok qui va gérer pour nous plusieurs choses déjà : les Getters / Setters, constructors & toString() :
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
private String firstName;
private String lastName;
private String address;
}
Magique n’est-ce pas ? On passe de 49 à 12 lignes. Gain de lisibilité et de temps.
Revenons sur les annotations :
@Getter / @Setter : Ces annotations permettent de ne plus avoir à s’occuper de l’écriture des accesseurs de la classe. Tout est fait automatiquement à la compilation, et peut importe le nombre de propriétés.
@AllArgsConstructor : Permets l’écriture automatique par Lombok du constructor de classe qui contient toutes les propriétés (ici firstName, lastName & address) :
@NoArgsConstructor : Permets l’écriture automatique du constructor vide.
@ToString : Cette annotation permet de se passer l’écriture de la méthode toString() (méthode qui renvoie le nom de la classe de l’objet suivi de l’adresse de cet objet).
Vous l’aurez compris, Lombok est d’une grande utilité en ce qui concerne les tâches les plus basiques, mais il ne s’arrête pas la :
@AllArgsConstructor (access = AccessLevel.PROTECTED) : Parfois les propriétés d’une classe peuvent être définies en “static“, et dans ce cas, la compilation du programme affiche une erreur. Une propriété “static” doit être initialisée, et pour éviter cette erreur de compilation, il faut ajouter l’argument “force = true” à l’annotation NoArgsConstructor : @NoArgsConstructor (force = true)
@ToString & @EqualsAndHashCode : Permets de générer les méthodes toString(), hashCode() et equals()
@Cleanup : Permets la gestion automatique des fermetures de ressources ouvertes sans avoir à écrire les blocs try{} / finally{}
Quelques indications :
- Certains logiciels de revue de code analysent que le code source et non le ByteCode, ils seront donc perdus.
- Avec les annotations @EqualsAndHashCode & @ToString, préciser les champs avec l’attribut “of = …”
- Parfois, trop d’annotations tuent les annotations ..
Voilà pour la partie la plus simple de Lombok, d’autres articles sortiront pour passer en revue cette bibliothèque.
Ping : Les fonctionnalités de Java 16