web-dev-qa-db-fra.com

L'annotation Project Lombok @Data crée-t-elle un constructeur quel qu'il soit?

J'ai une classe avec un @Data annotation, mais je ne sais pas si un constructeur avec des arguments est généré ou le seul constructeur généré est celui par défaut (pas d'arguments) de Vanilla Java.

17
JoseHdez_2

UNE @RequiredArgsConstructor sera généré si aucun constructeur n'a été défini.

La page Project Lombok @Data explique:

@Data, c'est comme avoir des @Getter implicites, @Setter, @ToString, @EqualsAndHashCode et @ RequiredArgsConstructor annotations sur la classe (sauf qu'aucun constructeur ne sera généré s'il existe un constructeur explicitement écrit) .

24
JoseHdez_2

@Data crée uniquement un @RequiredArgsConstructor. Le site de documentation de Lombok pour les annotation des données et constructeurs explique:

@RequiredArgsConstructor génère un constructeur avec 1 paramètre pour chaque champ qui nécessite une gestion spéciale. Tous les champs finaux non initialisés obtiennent un paramètre, ainsi que tous les champs marqués comme @NonNull qui ne sont pas initialisés là où ils sont déclarés. Pour les champs marqués avec @NonNull, une vérification nulle explicite est également générée. Le constructeur lèvera une NullPointerException si l'un des paramètres destinés aux champs marqués avec @NonNull contient null. L'ordre des paramètres correspond à l'ordre dans lequel les champs apparaissent dans votre classe.

Supposons que vous ayez un POJO qui utilise l'annotation Lombok @Data:

public @Data class Z {
    private String x;
    private String y;
}

Vous ne pouvez pas créer l'objet comme Z z = nouveau Z (x, y) car il n'y a pas d'argument sur votre classe Z qui soit "requis". Il crée le constructeur avec zéro paramètre car @Data vous donne des Setters et Getters pour vos propriétés et vous pouvez appeler setX et setY après avoir créé votre instance.

Vous pouvez soit faire x et y @NonNull ou final de sorte qu'ils doivent être passés par le constructeur ou annoter votre classe Z avec @AllArgsConstructor.

2
Surbhi Gupta