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:
- Finalna polja: Sva polja u klasi postaju final, što znači da im se vrednosti ne mogu promeniti nakon što su inicijalizovane u konstruktoru.
- Konstruktor: Generiše se konstruktor koji uzima sve polja kao argumente i inicijalizuje ih prilikom instanciranja objekta.
- Get metode: Generiše se javna get metoda za svako polje u klasi, omogućavajući pristup vrednostima polja.
- toString() metoda: Generiše se toString() metoda koja vraća string reprezentaciju objekta, uključujući sve njegove polja.
- 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.