Omitindo um Setter / Getter em Lombok

232

Eu quero usar uma classe de dados no Lombok. Como ele possui cerca de uma dúzia de campos, eu o anotei @Datapara gerar todos os setters e getter. No entanto, há um campo especial para o qual eu não quero que os acessadores sejam implementados.

Como o Lombok omite esse campo?

DerMike
fonte

Respostas:

415

Você pode passar um nível de acesso para as anotações @Gettere @Setter. Isso é útil para tornar os getters ou setters protegidos ou privados. Também pode ser usado para substituir o padrão.

Com @Data, você tem acesso público aos acessadores por padrão. Agora você pode usar o nível de acesso especial NONEpara omitir completamente o acessador, assim:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;
Michael Piefel
fonte
1
Perfeito. Se o campo privado for um POJO e também anotado com @Delegate (), ele poderá ser usado para extrair um conjunto de propriedades em uma classe reutilizável separada. Isso pode ser útil por ter o mesmo conjunto de propriedades aplicado a várias classes (tipo de combinação para adicionar propriedades). Por exemplo, um mixin representando um conjunto de atributos que podem ser aplicados à modelagem de vários elementos XML.
xorcus 30/01
Você tem algo semelhante a omitir um campo no construtor?
Zt1983811 de
1
Você quer dizer que o atributo não deve aparecer no construtor? Não, não há nada diretamente para isso. Lembre-se, porém, que isso @Builderpode ser aplicado a funções e construtores, bem como a classes, e ofereça apenas a definição dos atributos que surgem na assinatura dessa função.
Michael Piefel
Ele não implementa nenhum setter e getter para esta propriedade em que @Data inclui setters e getters por padrão. que seria excluído ao mencionar AccessLevel.NONE.
Ram
41

De acordo com a descrição @Data, você pode usar:

Todos os getters e setters gerados serão públicos. Para substituir o nível de acesso, anote o campo ou a classe com uma anotação explícita @Setter e / ou @Getter. Você também pode usar esta anotação (combinando-a com AccessLevel.NONE) para suprimir a geração de um getter e / ou setter por completo.

Mark Rotteveel
fonte
0

Use o código abaixo para omitir / excluir da criação de setter e getter.

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

Spring boot versão 2.3 , isso está funcionando bem.

Shakthifuture
fonte
-3

Se você tiver um setter e um getter como privados, ele aparecerá nas verificações PMD.

arpit sharma
fonte