Sobes.tech
Junior

Czym jest biblioteka Lombok i jak jest używana w rozwoju Java?

sobes.tech AI

Odpowiedź od AI

Lombok to biblioteka Java, która pomaga zmniejszyć ilość powtarzalnego kodu (boilerplate). Robi to, automatycznie generując metody takie jak konstruktory, gettery, settery, metody equals(), hashCode() i toString() podczas kompilacji, na podstawie adnotacji.

Główne adnotacje i ich zastosowanie:

  • @Getter / @Setter: Generują metody getX() i setX() dla pól klasy.
  • @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor: Generują konstruktory bezargumentowe, z argumentami dla wszystkich pól oznaczonych jako @NonNull lub final, oraz z argumentami dla wszystkich pól odpowiednio.
  • @Data: łączy @ToString, @EqualsAndHashCode, @Getter, @Setter i @RequiredArgsConstructor. Przydatne dla klas modeli.
  • @Value: Podobne do @Data, ale czyni klasę niezmienną (final). Wszystkie pola domyślnie private final.
  • @Builder: Generuje kod dla wzorca "Builder", który upraszcza tworzenie obiektów z wieloma polami.
  • @Slf4j (i inne dla różnych loggerów): Tworzy statyczne pole loggera (log) w klasie.

Przykład użycia @Data:

// Model użytkownika bez Lombok
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żytkownika z Lombok
import lombok.Data;

@Data
public class UserLombok {
    private String username;
    private String email;
    // Gettery, settery, konstruktory, equals, hashCode, toString
    // będą automatycznie generowane podczas kompilacji
}

Aby korzystać z Lombok, należy dodać zależność do systemu budowania (Maven lub Gradle) i zainstalować wtyczkę do IDE, aby poprawnie interpretowała adnotacje i zapewniała autouzupełnianie.

Maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version> <!-- Użyj aktualnej wersji -->
    <scope>provided</scope>
</dependency>

Gradle:

compileOnly 'org.projectlombok:lombok:1.18.24' // Użyj aktualnej wersji
annotationProcessor 'org.projectlombok:lombok:1.18.24' // Użyj aktualnej wersji

Lombok znacznie skraca ilość kodu, czyniąc go bardziej czytelnym i zmniejszając ryzyko błędów przy ręcznym pisaniu metod szablonowych. Jednakże, należy pamiętać, że ukrywa część logiki, co czasami może utrudnić debugowanie lub zrozumienie wygenerowanego kodu bez użycia wtyczki IDE.