Pominięcie jednego Settera / Gettera w Lombok

232

Chcę użyć klasy danych w Lombok. Ponieważ ma około tuzina pól, opatrzyłem go adnotacjami @Data, aby wygenerować wszystkie setery i getter. Jest jednak jedno specjalne pole, dla którego nie chcę, aby wdrażacze były wdrażane.

Jak Lombok pomija to pole?

DerMike
źródło

Odpowiedzi:

415

Możesz przekazać poziom dostępu do @Getteri @Setteradnotacji. Jest to przydatne, aby osoby pobierające lub ustawiające były chronione lub prywatne. Można go również użyć do zastąpienia wartości domyślnej.

Dzięki @Datadomyślnie masz publiczny dostęp do akcesoriów. Możesz teraz użyć specjalnego poziomu dostępu, NONEaby całkowicie pominąć akcesorium, w następujący sposób:

@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private int mySecret;
Michael Piefel
źródło
1
Idealny. Jeśli pole prywatne to POJO, a także opatrzone adnotacją @Delegate (), można go użyć do wyodrębnienia zestawu właściwości do oddzielnej klasy wielokrotnego użytku. Może to być przydatne do zastosowania tego samego zestawu właściwości do wielu klas (rodzaj mieszanki do dodawania właściwości). Na przykład mixin reprezentujący zestaw atrybutów, które mogą mieć zastosowanie do modelowania różnych elementów XML.
xorcus
Czy masz coś podobnego do pominięcia jednego pola w programie budującym?
zt1983811
1
Masz na myśli, że atrybut nie powinien pojawiać się w kreatorze? Nie, nie ma na to nic bezpośredniego. Pamiętaj jednak, że @Buildermożna to umieścić zarówno na funkcjach i konstruktorach, jak i klasach, i oferuje jedynie ustawienie tych atrybutów, które pojawiają się w sygnaturze tej funkcji.
Michael Piefel
Nie implementuje on settera i gettera dla tej właściwości, gdzie @Data domyślnie zawiera setter i gettery. które można by wykluczyć, wspominając AccessLevel.NONE.
Ram
41

Zgodnie z opisem @Data możesz użyć:

Wszystkie generowane pobierające i ustawiające będą publiczne. Aby przesłonić poziom dostępu, oznacz pole lub klasę za pomocą wyraźnej adnotacji @Setter i / lub @Getter. Możesz także użyć tej adnotacji (łącząc ją z AccessLevel.NONE), aby całkowicie pominąć generowanie gettera i / lub setera.

Mark Rotteveel
źródło
-3

Jeśli masz ustawiającego i pobierającego jako prywatny, pojawi się w czekach PMD.

Arpit Sharma
źródło