Sobes.tech
Junior

O que é a biblioteca Lombok e como ela é usada no desenvolvimento em Java?

sobes.tech IA

Resposta da IA

O Lombok é uma biblioteca Java que ajuda a reduzir a quantidade de código repetitivo (código boilerplate). Faz isso gerando automaticamente métodos como construtores, getters, setters, métodos equals(), hashCode() e toString() durante a compilação, com base em anotações.

As principais anotações e seu uso:

  • @Getter / @Setter: Geram métodos getX() e setX() para os campos da classe.
  • @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor: Geram construtores sem argumentos, com argumentos para todos os campos marcados como @NonNull ou final, e com argumentos para todos os campos, respetivamente.
  • @Data: Combina @ToString, @EqualsAndHashCode, @Getter, @Setter e @RequiredArgsConstructor. Útil para classes modelo.
  • @Value: Semelhante a @Data, mas torna a classe imutável (final). Todos os campos por padrão são private final.
  • @Builder: Gera código para o padrão "Builder", que simplifica a criação de objetos com múltiplos campos.
  • @Slf4j (e outros para diferentes loggers): Cria um campo estático de logger (log) na classe.

Exemplo de uso de @Data:

// Modelo de utilizador sem 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;
    }
}

// Modelo de utilizador com Lombok
import lombok.Data;

@Data
public class UserLombok {
    private String username;
    private String email;
    // Getters, setters, construtores, equals, hashCode, toString
    // serão gerados automaticamente durante a compilação
}

Para usar Lombok, é necessário adicionar a dependência ao sistema de build (Maven ou Gradle) e configurar um plugin na sua IDE para interpretar corretamente as anotações e fornecer autocompletar.

Maven:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version> <!-- Use a versão atual -->
    <scope>provided</scope>
</dependency>

Gradle:

compileOnly 'org.projectlombok:lombok:1.18.24' // Use a versão atual
annotationProcessor 'org.projectlombok:lombok:1.18.24' // Use a versão atual

O Lombok reduz significativamente a quantidade de código, tornando-o mais legível e reduzindo a probabilidade de erros ao escrever métodos repetitivos manualmente. No entanto, é importante lembrar que ele oculta parte da lógica, o que às vezes pode dificultar a depuração ou compreensão do código gerado sem usar um plugin na IDE.