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?

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;

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.


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.


-3

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.