Omettere un setter / getter in Lombok


232

Voglio usare una classe di dati in Lombok. Dal momento che ha circa una dozzina di campi, l'ho annotato @Dataper generare tutti i setter e getter. Tuttavia, esiste un campo speciale per il quale non desidero implementare gli accessori.

In che modo Lombok omette questo campo?

Risposte:


415

È possibile passare un livello di accesso alle annotazioni @Gettere @Setter. Questo è utile per rendere protetti o privati ​​getter o setter. Può anche essere utilizzato per sovrascrivere il valore predefinito.

Con @Data, hai l'accesso pubblico agli accessi per impostazione predefinita. Ora puoi utilizzare il livello di accesso speciale NONEper omettere completamente l'accessor, in questo modo:

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

1
Perfetto. Se il campo privato è un POJO e anche annotato con @Delegate (), potrebbe essere utilizzato per estrarre un set di proprietà in una classe riutilizzabile separata. Ciò può essere utile per avere lo stesso set di proprietà applicato a più classi (tipo di mixin per l'aggiunta di proprietà). Ad esempio, un mixin che rappresenta un insieme di attributi che possono essere applicati alla modellazione di vari elementi XML.
xorcus,

Hai qualcosa di simile all'omissione di un campo nel builder?
zt1983811,

1
Vuoi dire che l'attributo non dovrebbe apparire nel builder? No, non c'è niente direttamente per questo. Ricorda però che @Builderpuò essere messo su funzioni e costruttori, nonché su classi, e offre solo l'impostazione di quegli attributi che emergono nella firma di quella funzione.
Michael Piefel,

Non implementa setter e getter per questa proprietà in cui @Data include setter e getter per impostazione predefinita. che sarebbe escluso citando AccessLevel.NONE.
Ram

41

Secondo la descrizione di @Data puoi usare:

Tutti i getter e setter generati saranno pubblici. Per sovrascrivere il livello di accesso, annotare il campo o la classe con un'annotazione esplicita @Setter e / o @Getter. Puoi anche usare questa annotazione (combinandola con AccessLevel.NONE) per sopprimere la generazione di un getter e / o setter del tutto.


0

Utilizzare il codice seguente per omettere / escludere dalla creazione di setter e getter.

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

Versione 2.3 di avvio a molla , funziona bene.


-3

Se hai setter e getter come privato, verrà visualizzato nei controlli PMD.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.