Project Lombok – no more boilerplate code
Jeśli nudzi Cię żmudne pisanie (lub generowanie przez IDE) getterów, setterów, konstruktorów, hashcode’ów, equalsów, toStringów itd, to Lombok jest właśnie dla Ciebie.
Oto kilka jego możliwości.
gettery i settery
Wystarczy udekorować żądane pola adnotacjami @Getter / @Setter.
import lombok.Getter; import lombok.Setter; public class User { @Getter private long id; @Getter private int birthYear; @Getter @Setter private String login; @Getter @Setter private String password; }
Odpowiednie metody zostaną wygenerowane i będą widoczne w IDE.
Będą także w skompilowanej klasie.
<barista@javaczyherbata.pl> javap User Compiled from "User.java" public class User extends java.lang.Object{ public User(); public long getId(); public int getBirthYear(); public java.lang.String getLogin(); public void setLogin(java.lang.String); public java.lang.String getPassword(); public void setPassword(java.lang.String); } <barista@javaczyherbata.pl>
Więcej informacji o @Getter / @Setter.
konstruktory i toString
import lombok.*; @AllArgsConstructor(access = AccessLevel.PROTECTED) @ToString(exclude = "password") public class User { @Getter private long id; @Getter private int birthYear; @Getter @Setter private String login; @Getter @Setter private String password; public static void main(String[] args) { final User user = new User(100L, 1980, "barista", "**************"); System.out.println(user); } }
Po uruchomieniu programu, obiekt User ładnie się przedstawia.
<barista@javaczyherbata.pl> java User User(id=100, birthYear=1980, login=barista) <barista@javaczyherbata.pl>
Więcej informacji o @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor oraz @ToString.
equals i hashcode
Jeśli obiekt będzie używany z kolekcjami, warto wygenerować equals i hashcode.
Więcej informacji o @EqualsAndHashCode.
Kompleksowo: gettery, settery, equals, hashcode, toString oraz konstruktor (wymagany)
Adnotacja @Data to skrót do poprzednich czterech + @RequiredArgsConstructor.
Więcej o @Data.
close (z interfejsu strumieni) w sekcji finally
Generuje odpowiednią sekcję try-finally i zamyka strumień.
Więcej o @Cleanup.
lepsza synchronizacja metod
Synchronizuje na osobnym locku; jeśli się go nie wskaże w atrybucie, zostanie utworzony (z Object[0]).
Więcej o @Synchronized.
logger
Zwraca jedną z czterech implementacji logowania.
Więcej o @Log, @CommonsLog, @Log4j i @Slf4j.
kilka eksperymentalnych feature’ów
Więcej o @Accessors, @ExtensionMethod, @FieldDefaults, @Wither i @Value.
Jeśli z jakichś powodów nie chcemy już więcej używać Lomboka lub potrzebujemy generowany kod w kodzie źródłowym, możemy użyć delomboka.