Sobes.tech
Junior

Co je knihovna Lombok a jak se používá při vývoji v jazyce Java?

sobes.tech AI

Odpověď od AI

Lombok je knihovna pro Javu, která pomáhá snižovat množství boilerplate kódu. To dosahuje automatickým generováním metod, jako jsou konstruktory, gettery, settery, equals(), hashCode() a toString() během kompilace na základě anotací.

Hlavní anotace a jejich použití:

  • @Getter / @Setter: Generují metody getX() a setX() pro pole třídy.
  • @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor: Generují konstruktor bez argumentů, konstruktor s argumenty pro všechna pole označená jako @NonNull nebo final, a konstruktor pro všechna pole.
  • @Data: Kombinuje @ToString, @EqualsAndHashCode, @Getter, @Setter a @RequiredArgsConstructor. Vhodné pro modelové třídy.
  • @Value: Podobné jako @Data, ale činí třídu neměnnou (final). Všechna pole jsou implicitně private final.
  • @Builder: Generuje kód pro vzor "Builder", který zjednodušuje vytváření objektů s mnoha poli.
  • @Slf4j (a další pro různé loggery): Vytváří statické pole loggeru (log) ve třídě.

Příklad použití @Data:

// Model uživatele bez Lomboku
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 uživatele s Lombok
import lombok.Data;

@Data
public class UserLombok {
    private String username;
    private String email;
    // Gettery, settery, konstruktory, equals, hashCode, toString
    // budou automaticky generovány během kompilace
}

Pro použití Lomboku je nutné přidat závislost do systému sestavení (Maven nebo Gradle) a nainstalovat plugin do IDE, aby správně interpretoval anotace a poskytoval automatické doplňování.

Maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version> <!-- Použijte aktuální verzi -->
    <scope>provided</scope>
</dependency>

Gradle:

compileOnly 'org.projectlombok:lombok:1.18.24' // Použijte aktuální verzi
annotationProcessor 'org.projectlombok:lombok:1.18.24' // Použijte aktuální verzi

Lombok výrazně snižuje množství kódu, činí jej čitelnějším a snižuje pravděpodobnost chyb při ruční psaní šablonových metod. Nicméně je třeba mít na paměti, že skrývá část logiky, což může někdy ztížit ladění nebo pochopení vygenerovaného kódu bez použití IDE pluginu.