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.