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.
lombok-example
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.

Leave a Reply