recherche
MaisonJavajavaDidacticielProjet Lombok en Java

Proyecto Lombok en Java

Introduction

Lombok est une bibliothèque qui agit comme un processeur d'annotation pour Java, conçu pour éliminer la redondance dans le code. Sa fonction principale est d'automatiser la génération de code répétitif ou « passe-partout » - ces éléments qui, bien que nécessaires, n'ajoutent pas de valeur directe à la logique de notre programme. Principalement, il est utilisé pour la génération automatique au moment de la compilation des méthodes getter et setter, des constructeurs, des méthodes equals(), hashCode(), toString(), entre autres éléments courants dans les classes Java.

Au lieu d'écrire manuellement des dizaines de lignes de code pour ces fonctions de base, Lombok vous permet de les définir à l'aide d'annotations simples, ce qui donne un code plus propre, plus maintenable et moins sujet aux erreurs.

Facilité

Pour utiliser Lombok dans un projet Java, il est nécessaire d'ajouter la dépendance correspondante dans le fichier pom.xml (dans le cas d'un projet Maven) ou build.gradle (dans le cas d'un projet Gradle), en plus d'installer le plugin correspondant dans l'IDE que nous utilisons. Au cours de cet article, nous utiliserons Maven et IntelliJ IDEA comme exemple.

<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

En cas de doute vous pouvez toujours consulter la documentation officielle de Lombok :

  • Lombok avec Maven
  • Lombok dans IntelliJ IDEA

@données

Lorsque nous créons une classe, nous effectuons régulièrement les actions suivantes, soit manuellement, soit avec un raccourci fourni par notre IDE :

  • Encapsuler les attributs et générer leurs méthodes getter et setter
  • Générer un constructeur vide et un autre qui reçoit tous les attributs
  • Implémenter les méthodes equals(), hashCode() et toString()

Eh bien, Lombok a l'annotation @Data qui nous permet de faire tout cela sur une seule ligne, générant tout ce qui concerne le POJO (Plain Old Java Objects). Cette annotation est une combinaison des annotations @Getter, @Setter, @EqualsAndHashCode, @NoArgsConstructor et @AllArgsConstructor que nous verrons plus tard.

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}
public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

@NoArgsConstructor, @AllArgsConstructor et @RequiredArgsConstructor

Ces annotations nous permettent de générer automatiquement des constructeurs avec différentes combinaisons d'arguments, en considérant que les attributs sont utilisés selon l'ordre dans lequel ils ont été déclarés dans la classe.

  • @NoArgsConstructor : Génère un constructeur sans arguments (vide), s'il n'est pas possible d'en générer un, une exception sera levée, pour éviter cela utilisez simplement l'annotation comme suit @NoArgsConstructor(force = true).
  • @AllArgsConstructor : Génère un constructeur avec tous les attributs de la classe comme arguments.
  • @RequiredArgsConstructor : génère un constructeur pour tous les champs finaux et/ou marqués de l'annotation @NonNull.
<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

@Getter et @setter

Ces annotations nous permettent de générer automatiquement les méthodes getter et setter pour tous les attributs de la classe, ou uniquement pour ceux qui sont marqués avec l'annotation correspondante, c'est-à-dire qu'elles peuvent être utilisées au niveau de la classe ou de l'attribut.

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}
public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

@ToString

Cette annotation génère automatiquement la méthode toString(), qui renvoie une représentation sous forme de chaîne de la classe et de ses attributs au format suivant : ClassName(attribute1=value1,attribut2=value2, ...). Par défaut, tous les attributs non statiques de la classe sont inclus dans le résultat, mais des attributs spécifiques peuvent être exclus à l'aide de l'attribut @ToString.Exclude. Si vous souhaitez afficher uniquement la valeur de l'attribut et non le nom tel que déclaré, vous pouvez utiliser @ToString(includeFieldNames = false).

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Persona {
    private String nombre;
}

@EqualsAndHashCode

Permet de générer les méthodes equals() et hashCode() à partir de tous les attributs de la classe. Si vous souhaitez exclure ou inclure un attribut, vous pouvez le faire en utilisant l'annotation @EqualsAndHashCode.Exclude et @EqualsAndHashCode.Include. respectivement.

import lombok.*;

@Getter
@Setter
public class Persona {
    private String nombre;
    private String apellido;
}

@Valeur

Auparavant en Java pour créer une classe immuable, il fallait effectuer une série d'étapes, comme faire en sorte que la classe et/ou les attributs soient du type final, et que les méthodes setter ne soient pas générées. Lombok nous permet de créer facilement des classes immuables à l'aide de l'annotation @Value, qui combine les annotations @Getter, @ToString, @EqualsAndHashCode et @AllArgsConstructor pour générer une classe immuable. Tous les attributs sont marqués comme privés finaux et les méthodes setter ne sont pas générées. C'est la variante immuable de @Data.

import lombok.*;

public class Persona {
    @Getter @Setter
    private String nombre;
    private String apellido;
}

Dans les versions récentes de Java, cette annotation perd du sens par rapport à l'utilisation des Records, puisqu'ils ont le même but, et qu'il est plus pratique d'utiliser des records. Si vous souhaitez en savoir plus sur ce sujet, il y a d'autres articles sur le blog sur les records.

<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

@val

Cette annotation nous permet de déclarer une variable comme finale et de déduire automatiquement son type de données, c'est-à-dire qu'il n'est pas nécessaire de spécifier le type de données de la variable, Lombok se charge de le déduire. C'est utile dans le cas où le type de données variable est très long ou complexe, vous évitez ainsi de le répéter.

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}

Cette annotation peut perdre son sens si on utilise directement final var ou simplement var pour l'inférence de type, ce qui est plus pratique puisque c'est une caractéristique du langage. Si vous souhaitez en savoir plus à ce sujet, vous pouvez consulter l'article suivant

public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

@var

Cela fonctionne exactement de la même manière que @val, mais il ne déclare pas la variable comme finale, il en déduit simplement son type. Il est nécessaire de considérer la notion d'inférence de type, puisqu'on ne peut pas déclarer quelque chose de type String et qu'il n'est pas définitif de vouloir lui attribuer une valeur de type int. Encore une fois, cette annotation est remplacée par var dans les versions récentes de Java.

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Persona {
    private String nombre;
}

@NonNull

Cette annotation peut être utilisée sur les attributs de classe et les paramètres d'une méthode, elle indique essentiellement que la valeur d'un attribut ne peut pas être nulle, dans le cas où une tentative est faite pour attribuer une valeur nulle à un attribut marqué avec @NonNull, cela le fera être lancé une NullPointerException, c'est-à-dire si (param == null) throw new NullPointerException("param est marqué non nul mais nul"); Quelle que soit l'exception qu'elle génère, son utilisation est plus visible au sein de l'EDI lui-même, puisqu'elle nous indiquera d'une manière ou d'une autre que cette valeur ne peut pas être nulle.

import lombok.*;

@Getter
@Setter
public class Persona {
    private String nombre;
    private String apellido;
}

@Nettoyage

Cette annotation permet de s'assurer que toute ressource qui l'utilise si elle possède une méthode close() ou qui implémente les interfaces AutoCloseable ou Closeable est automatiquement fermée à la fin du bloc de code dans lequel elle se trouve. Il est utile en cas de travail avec des ressources qui doivent être libérées, telles que des fichiers, des connexions à des bases de données, etc.

import lombok.*;

public class Persona {
    @Getter @Setter
    private String nombre;
    private String apellido;
}

Ce résultat peut être obtenu manuellement si on utilise un essai avec des ressources.

import lombok.*;

@AllArgsConstructor
@ToString
public class Persona {
    private String nombre;
    @ToString.Exclude
    private String apellido;
}

// Output: Persona(nombre=Maria)

@constructeur

Cette annotation nous permet de générer automatiquement un modèle de conception Builder, c'est-à-dire un objet qui nous permet de construire des objets complexes étape par étape, afin que différents attributs d'un objet puissent être configurés sans avoir à le faire. appeler un constructeur avec de nombreux paramètres. C'est utile dans le cas où une classe a de nombreux attributs et que nous ne voulons pas avoir un constructeur avec de nombreux paramètres.

<dependencies>
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <version>1.18.36</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

@Avec

Cette annotation nous permet de créer une méthode qui renvoie une copie de l'objet actuel avec un attribut modifié, c'est-à-dire qu'elle génère une méthode withAttributeName(Object object) qui nous permet de créer une copie de l'objet actuel avec l'objet attribut modifié par la valeur que nous passons en argument. C'est utile dans le cas où nous souhaitons modifier un attribut d'un objet sans modifier l'objet d'origine.

import lombok.Data;

@Data
public class Persona {
    private String nombre;
}
public class Main {
    public static void main(String[] args) {
        Persona p1 = new Persona();
        p2.setNombre("Maria");

        System.out.println(p1.getNombre());
    }
}

Jusqu'à présent, nous avons vu certaines des annotations qui peuvent être utilisées le plus fréquemment, chacune d'elles peut ou non accepter des configurations supplémentaires, de même il y en a d'autres qui sont marquées comme expérimentales, dans tous les cas Il est important de consulter la documentation officielle pour tirer le meilleur parti de toutes les fonctionnalités que Lombok nous offre et des avantages en matière de génération de code répétitive.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Mar 17, 2025 pm 05:46 PM

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Mar 17, 2025 pm 05:44 PM

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Mar 17, 2025 pm 05:43 PM

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Mar 17, 2025 pm 05:35 PM

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

Comment puis-je utiliser le RMI de Java (Invocation de méthode distante) pour l'informatique distribuée?Comment puis-je utiliser le RMI de Java (Invocation de méthode distante) pour l'informatique distribuée?Mar 11, 2025 pm 05:53 PM

Cet article explique l'invocation de la méthode distante de Java (RMI) pour la construction d'applications distribuées. Il détaille la définition de l'interface, la mise en œuvre, la configuration du registre et l'invocation côté client, résolvant des défis tels que les problèmes de réseau et la sécurité.

Comment utiliser l'API Sockets de Java pour la communication réseau?Comment utiliser l'API Sockets de Java pour la communication réseau?Mar 11, 2025 pm 05:53 PM

Cet article détaille l'API Socket de Java pour la communication réseau, couvrant la configuration du serveur client, la gestion des données et les considérations cruciales telles que la gestion des ressources, la gestion des erreurs et la sécurité. Il explore également les techniques d'optimisation des performances, je

Comment puis-je créer des protocoles de réseautage personnalisés en Java?Comment puis-je créer des protocoles de réseautage personnalisés en Java?Mar 11, 2025 pm 05:52 PM

Cet article détaille la création de protocoles de réseautage Java personnalisés. Il couvre la définition du protocole (structure de données, cadrage, gestion des erreurs, versioning), implémentation (utilisant des sockets), sérialisation des données et meilleures pratiques (efficacité, sécurité, maintien

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code