Omitiendo un Setter / Getter en Lombok

232

Quiero usar una clase de datos en Lombok. Como tiene aproximadamente una docena de campos, lo anoté @Datapara generar todos los setters y getter. Sin embargo, hay un campo especial para el que no quiero que se implementen los accesores.

¿Cómo omite Lombok este campo?

DerMike
fuente

Respuestas:

415

Puede pasar un nivel de acceso a las anotaciones @Gettery @Setter. Esto es útil para hacer getters o setters protegidos o privados. También se puede usar para anular el valor predeterminado.

Con @Data, tiene acceso público a los accesores de forma predeterminada. Ahora puede usar el nivel de acceso especial NONEpara omitir completamente el descriptor de acceso, de esta manera:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;
Michael Piefel
fuente
1
Perfecto. Si el campo privado es un POJO y también se anota con @Delegate (), podría usarse para extraer un conjunto de propiedades en una clase reutilizable separada. Esto puede ser útil para tener el mismo conjunto de propiedades aplicado a múltiples clases (una especie de mixin para agregar propiedades). Por ejemplo, un mixin que representa un conjunto de atributos que pueden aplicarse al modelado de varios elementos XML.
xorcus
¿Tiene algo similar a omitir un campo en el generador?
zt1983811
1
¿Quiere decir que el atributo no debería aparecer en el generador? No, no hay nada directamente para esto. Sin embargo, recuerde que @Builderse puede poner en funciones y constructores, así como en clases, y solo ofrezca establecer los atributos que aparecen en la firma de esa función.
Michael Piefel
No implementa ningún setter y getter para esta propiedad donde @Data incluye setters y getters por defecto. que se excluiría al mencionar AccessLevel.NONE.
Ram
41

De acuerdo con la descripción de @Data , puede usar:

Todos los captadores y establecedores generados serán públicos. Para anular el nivel de acceso, anote el campo o la clase con una anotación explícita @Setter y / o @Getter. También puede usar esta anotación (combinándola con AccessLevel.NONE) para suprimir la generación de un getter y / o setter por completo.

Mark Rotteveel
fuente
0

Utilice el siguiente código para omitir / excluir de crear setter y getter.

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

Spring boot 2.3 versión, esto está funcionando bien.

Shakthifuture
fuente
-3

Si tiene setter y getter como privado, aparecerá en los controles PMD.

Sharma arpit
fuente