Skip to content

Adrian Sowiński Posts

Lombok i jego wspaniałości

Lombok jest małą i bardzo przyjemną biblioteką, która pozwala nam ograniczyć boiler code w klasach Javy. Dzięki użyciu adnotacji, część kodu jest generowana podczas kompilacji i dodawana w odpowiednie miejsca.
Sama biblioteka jest potrzebna tylko w kompilacji, dlatego nie obciąża finalnej aplikacji. Dodatkowo Lombok nie powoduje spadku wydajności aplikacji, więc nie musimy się obawiać przed korzystaniem z niego.

Przykład użycia

Domyślnie, taka prosta klasa wręcz powala swoją niepotrzebną objętością:

Na powyższym przykładzie widzimy 48 linijek, z czego piszemy dwie, a o wygenerowanie reszty prosimy IDE (o ile nie jesteśmy masochistami 😉).

To jak to wygląda z Lombokiem

Wcześniejszy przykład można znacząco skrócić, co uprzyjemnia jego czytanie:

Teraz nasza klasa jest „odchudzona” o 40 linijek, a wszystko praktycznie kryje się za tymi dwiema adnotacjami:

  • @Data – jest to skrót agregujący inne adnotacje, które często występują w typowym POJO ( Plain Old Java Object)
  • @AllArgsConstructor – tworzy konstruktor dla wszystkich pól

No dobra, może trochę kłamałem że są to tylko dwie adnotacje, ale i tak o wiele częściej będziemy korzystać z tego skrótu zamiast używać ich osobno. Same adnotacje pojedynczo odpowiadają za generowanie tych metod od których są nazwane.

Inne przydatne funkcje

Lombok posiada dużo ciekawych adnotacji, które możecie znaleźć tutaj, wraz z ich pełniejszą dokumentacją, ja natomiast skupię się na obiektywnie najprzydatniejszych funkcjach.

var i val

Te słowa kluczowe służą do deklaracji zmiennych lokalnych, z zastrzeżeniem że:

  • var – służy do deklaracji zmiennych lokalnych (zostało wprowadzone jako element języka Java w wersji 10, więc jeśli używasz tej lub nowszej wersji to powinieneś używać słowa var wbudowanego w język )
  • val – działa dokładnie tak jak var z tym że zmienna jest finalna

@Value

Adnotacja ta jest bliźniaczym skrótem do @Data, z tym że wszystkie pola pola są z domysłu prywatne i finalne, sama klasa również staje się finalna. Nie są również tworzone settery, a konstruktor pokrywa każde pole, poza tymi które są inicjalizowane przy deklaracji.

Przykład adnotacji @Value

@Builder

Dzięki tej adnotacji możemy prosto i szybko zastosować wzorzec projektowy Builder. Po jego dodaniu, kompilator wygeneruje statyczną zagnieżdżoną klasę buildera oraz adekwatny konstruktor. Stosując go razem z @Value łatwo uzyskamy w pełni funkcjonalny value object razem z jego builderem.

Przykład adnotacji @Builder

@Log

Jest to jeden z najprzyjemniejszych sposobów na dodanie loggera w polu o nazwie log. Dzięki lombokowi możemy wybierać odpowiadającą nam bibliotekę (osobno) i dodać ją prostą adnotacją np. @Log4j, @Slf4j. Pełną listę znajdziesz tutaj.

Przykład adnotacji @Log na przykładzie Slf4j

Jak dodać lomboka

Lomboka można łatwo dodać używając Mavena, bądź Gradle dodając go do zależności. Można oznaczyć go jako provided (Maven), lub compileOnly (Gradle), dzięki czemu nie będzie obciążał gotowej aplikacji.

Przykład dodania poprzez Maven’a
Przykład dodania poprzez Gradle

Warto jest się też zaopatrzyć w plugin do naszego ulubionego edytora, gdyż inaczej nie będzie on widział wygenerowanych metod i może odmówić kompilacji. Znaleźć go można na górnym pasku nawigacji w sekcji Install.

A co jeśli lombok już nie będzie potrzebny

Jeśli zdarzy się sytuacja że będziesz musiał kiedyś pozbyć się lomboka z projektu, to nie ma powodów do obaw. Dzięki pluginom możesz użyć opcji Delombok na klasie, bądź całym projekcie, co usunie adnotacje i wygeneruje odpowiadający im kod.

Podsumowanie

Lombok jest świetnym rozwiązaniem na pozbycie się choć części niepotrzebnego kodu. Poprawia czytelność i uprzyjemnia pracę z kodem. Warto zaproponować jego użycie w zespole jeśli jeszcze z niego nie korzystacie.