Sobes.tech
Junior

Šta je Lombok biblioteka i kako se koristi u Java razvoju?

sobes.tech АИ

Одговор од АИ

Lombok je Java biblioteka koja pomaže u smanjenju količine šablonskog koda (boilerplate code). To radi automatskim generisanjem metoda kao što su konstruktori, getteri, setteri, equals(), hashCode() i toString() tokom kompilacije na osnovu anotacija.

Glavne anotacije i njihova upotreba:

  • @Getter / @Setter: Generišu metode getX() i setX() za polja klase.
  • @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor: Generišu konstruktore bez argumenata, sa argumentima za sva polja označena kao @NonNull ili final, i za sva polja.
  • @Data: Kombinuje @ToString, @EqualsAndHashCode, @Getter, @Setter i @RequiredArgsConstructor. Pogodno za modele klasa.
  • @Value: Slično @Data, ali čini klasu nepromenjivom (final). Sva polja su podrazumevano private final.
  • @Builder: Generiše kod za "Builder" obrazac, koji pojednostavljuje kreiranje objekata sa mnogo polja.
  • @Slf4j (i drugi za različite loggere): Kreira statičko polje logera (log) u klasi.

Primer korišćenja @Data:

// Model korisnika bez Lomboka
public class UserManual {
    private String username;
    private String email;

    public UserManual(String username, String email) {
        this.username = username;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "UserManual{" +
               "username='" + username + '\'' +
               ", email='" + email + '\'' +
               '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UserManual that = (UserManual) o;
        if (username != null ? !username.equals(that.username) : that.username != null) return false;
        return email != null ? email.equals(that.email) : that.email == null;
    }

    @Override
    public int hashCode() {
        int result = username != null ? username.hashCode() : 0;
        result = 31 * result + (email != null ? email.hashCode() : 0);
        return result;
    }
}

// Model korisnika sa Lombokom
import lombok.Data;

@Data
public class UserLombok {
    private String username;
    private String email;
    // Getteri, setteri, konstruktori, equals, hashCode, toString
    // biće automatski generisani tokom kompilacije
}

Za korišćenje Lomboka, potrebno je dodati zavisnost u sistem za izgradnju (Maven ili Gradle) i instalirati plugin za IDE, kako bi pravilno interpretirao anotacije i pružao automatsko dopunjavanje.

Maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version> <!-- Koristite najnoviju verziju -->
    <scope>provided</scope>
</dependency>

Gradle:

compileOnly 'org.projectlombok:lombok:1.18.24' // Koristite najnoviju verziju
annotationProcessor 'org.projectlombok:lombok:1.18.24' // Koristite najnoviju verziju

Lombok značajno smanjuje količinu koda, čini ga čitljivijim i smanjuje verovatnoću grešaka pri ručnom pisanju šablonskih metoda. Međutim, važno je imati na umu da skriva deo logike, što ponekad može otežati debagovanje ili razumevanje generisanog koda bez IDE plugina.