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?

DerMike
la source

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;
Michael Piefel
la source
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.

Mark Rotteveel
la source
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.

Shakthifuture
la source
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.

arpit sharma
la source