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.
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) .
@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.