Omettre un Setter / Getter à Lombok


232

Je veux utiliser une classe de données à Lombok. Puisqu'il a une douzaine de champs, je l'ai annoté avec @Datapour générer tous les setters et getter. Cependant il y a un champ spécial pour lequel je ne veux pas que les accesseurs soient implémentés.

Comment Lombok omet-il ce champ?

Réponses:


415

Vous pouvez passer un niveau d'accès aux annotations @Getteret @Setter. Ceci est utile pour rendre les getters ou setters protégés ou privés. Il peut également être utilisé pour remplacer la valeur par défaut.

Avec @Data, vous avez un accès public aux accesseurs par défaut. Vous pouvez maintenant utiliser le niveau d'accès spécial NONEpour omettre complètement l'accesseur, comme ceci:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;

1
Parfait. Si le champ privé est un POJO et également annoté avec @Delegate (), il pourrait être utilisé pour extraire un ensemble de propriétés dans une classe réutilisable distincte. Cela peut être utile pour appliquer le même ensemble de propriétés à plusieurs classes (sorte de mixin pour ajouter des propriétés). Par exemple, un mixin représentant un ensemble d'attributs pouvant s'appliquer à la modélisation de divers éléments XML.
xorcus

Avez-vous la même chose que d'omettre un champ dans le générateur?
zt1983811

1
Vous voulez dire que l'attribut ne devrait pas apparaître dans le générateur? Non, il n'y a rien directement pour ça. N'oubliez pas que cela @Builderpeut être mis sur les fonctions et les constructeurs ainsi que sur les classes, et ne proposez que la définition des attributs qui apparaissent dans la signature de cette fonction.
Michael Piefel

Il n'implémente aucun setter et getter pour cette propriété où @Data inclut des setters et des getters par défaut. qui serait exclu en mentionnant AccessLevel.NONE.
Ram

41

Selon la description @Data, vous pouvez utiliser:

Tous les getters et setters générés seront publics. Pour remplacer le niveau d'accès, annotez le champ ou la classe avec une annotation explicite @Setter et / ou @Getter. Vous pouvez également utiliser cette annotation (en la combinant avec AccessLevel.NONE) pour supprimer la génération d'un getter et / ou d'un setter.


0

Utilisez le code ci-dessous pour omettre / exclure de la création de setter et getter.

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;

Version Spring boot 2.3 , cela fonctionne bien.


Cela n'ajoute rien à la réponse acceptée.
DerMike Il y a

-3

Si vous avez défini et getter comme privé, il apparaîtra dans les vérifications PMD.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.