record vs lombok

Pre nego što odlučimo koji pristup je bolji, potrebno je da se upoznamo sa idejom Record klasa i Lombok biblioteke.

Lombok

Projekat Lombok je Java biblioteka koja se uključuje u projekte radi smanjenja boilerplate koda. Koristeći Lombok, gubi se potreba za pisanjem šablonskih get-set, i equals metoda.
Pomoću anotacija, postižemo isto ponašanje, a gubimo potrebu da za svaku Bean klasu ponavljamo isti proces.

//Klasičan Bean primer
@Data//Ova anotacija u pozadini dodaje boilerplate
public class Identification {
private String idType;
private String idNumber;
}

@Data anotacija sada predstavlja prečicu za @ToString, @EqualsAndHashCode, @Getter za sva polja, @Setter za sva polja koja nisu finalna kao i @RequiredArgsConstructor.

Record klase

Record klase su predstavljene u Javi 14 i za cilj imaju uklanjanje boilerplate koda. Preporučene su za pravljenje klasa koje se koriste za prenos podataka.

public record Employee(Long id, String firstName, String lastName, String email, int age) {
// U zapisu možete imati druge metode
}
// Poziv Record-a
Employee e = new Employee(1L, "Pera", "Peric", "pera@pera.com", 32);
System.out.println( e.id() ); //1
System.out.println( e.email() ); //pera@pera.com

Neizmenjivost Record klasa i @Value anotacija u Lombok biblioteci

Recordi su podrazumevano immutable, što znači da su svi atributi implicitno postavljeni na final, i vrednosti moraju da se postave kroz konstruktor.

Ukoliko želimo da postignemo istu stvar koristeći Lombok, iskoristili bismo @Value anotaciju.

Kada se koristi @Value nad klasom, Lombok automatski generiše sledeće:

  1. Finalna polja: Sva polja u klasi postaju final, što znači da im se vrednosti ne mogu promeniti nakon što su inicijalizovane u konstruktoru.
  2. Konstruktor: Generiše se konstruktor koji uzima sve polja kao argumente i inicijalizuje ih prilikom instanciranja objekta.
  3. Get metode: Generiše se javna get metoda za svako polje u klasi, omogućavajući pristup vrednostima polja.
  4. toString() metoda: Generiše se toString() metoda koja vraća string reprezentaciju objekta, uključujući sve njegove polja.
  5. equals() i hashCode() metode: Generiše se equals() i hashCode() metoda koja upoređuje objekte na osnovu njihovih polja.

Builder obrazac

Builder obrazac je uvek dobar izbor za kreiranje objekata. Lombok ima odličnu podršku za njega kroz jednostavnu @Builder anotaciju. Java Record nema takvu opciju.

@Builder //jednostavnim dodavanjem, Lombok se brine o boilerplate-u
public class Identification {
private String idType;
private String idNumber;
}

Nasleđivanje

U vreme pisanja teksta, Record klase ne podržavaju nasleđivanje direktno, dok Lombok ovo podržava kroz anotacije.

Iako je asocijacija sjajan način za modelovanje Bean klase, Lombok nam omogućuje oba pristupa.

// Nasleđivanje pomoću Lombok-a
@Data
class FourWheeler{
private String engineType;
}
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
class Car extends FourWheeler{
private Integer carCapicity;
private String carModel;
}

Record može da bude odličan izbor kada ne želimo boilerplate kod I kada težimo clean code pristupu. Ukoliko želimo da koristimo builder, immutability, mutability i bean konvencije, Lombok je očigledan pobednik.