为了账号安全,请及时绑定邮箱和手机立即绑定

Lombok详解:16个注解让你的Java代码更简洁高效

Lombok是我所有微服务都默认依赖的一个库。Spring还将Lombok作为开发工具在Spring初始化器中支持。

照片由 Josh Bean 拍摄,图片来自 Unsplash

Lombok是由Remko PopmaDave Syer创建的。它是一个开源项目,由于它能通过减少样板代码来简化Java编程,因此在Java社区中被广泛采用。Lombok的易用性和与包括Spring在内的多种Java框架的集成,因此它变得越来越受欢迎。

Lombok 比传统方法有哪些优点
  1. 减少样板代码:Lombok 消除了如 getter、setter、构造函数和 toString() 等重复的代码,使你可以编写更少的代码并专注于业务逻辑。
  2. 提高可读性:通过减少样板代码的量,Lombok 使你的类更容易阅读和理解。
  3. 确保一致性:Lombok 自动生成一致的 getter、setter 和其他方法代码,确保这些方法遵循最佳实践而不需要手动干预。
  4. 加快开发速度:利用 Lombok 的注解,你可以迅速配置你的类而无需手动编写重复代码,从而加快开发速度。
  5. 减少人为错误:通过自动生成样板代码,Lombok 减少在编写这些方法时的人为错误,从而导致更少的 bug。
  6. 可定制的代码生成:Lombok 允许你通过各种注解和选项来自定义生成的代码,提供了生成代码的灵活性,使得开发更加灵活。
16 Lombok注解:
  1. **@Getter**:生成所有字段的 getter 方法。
  2. **@Setter**:生成所有字段的 setter 方法。
  3. **@ToString**:生成 toString() 方法。
  4. **@EqualsAndHashCode**:生成 equals()hashCode() 方法。
  5. **@AllArgsConstructor**:生成一个包含所有字段的构造函数。
  6. **@NoArgsConstructor**:生成一个无参构造函数。
  7. **@RequiredArgsConstructor**:为最终字段和非空字段生成构造函数。
  8. **@Data**:结合 @Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor 生成数据类。
  9. **@Value**:创建一个不可变类(包含所有字段的构造函数、@Getter@ToString@EqualsAndHashCode)。
  10. **@Builder**:生成一个构建器模式的实现,用于创建对象。
  11. **@Singular**:与 @Builder 结合使用,处理单个集合。
  12. **@Delegate**:将方法委托给另一个对象,以简化代码。
  13. **@Slf4j**:使用 SLF4J 提供一个日志实例。
使用 Lombok 轻松搞定日志框架:真的超值!如何用一个注解就能简化日志记录,还可以用 Lombok 自定义日志

**14. @Log**: 提供一个使用 java.util.logging 的日志记录器实例。

**15. @Log4j** 使用 Log4j 创建一个日志记录器。

**16. @NonNull**:为参数或字段生成非空检查。

再来一个 — @SneakyThrows

Lombok:一个不断带来惊喜的礼物。让我们来探讨 @SneakyThrows 确实是一个巧妙的 Lombok 特性,它提供了一个绕过 Java 受检异常的方法!!medium.com
Java 代码示例 —

我们以 User 这个实体为例。传统上,它的实体类会是这样的。

import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
import javax.persistence.Id;  

@Entity  
public class User {  

    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Long id;  

    private String username;  
    private String email;  
    private String password;  

    // 不含参数的构造函数  
    public User() {}  

    // 全参数构造函数  
    public User(Long id, String username, String email, String password) {  
        this.id = id;  
        this.username = username;  
        this.email = email;  
        this.password = password;  
    }  

    // 获取器方法  
    public Long getId() {  
        return id;  
    }  

    public void setId(Long id) {  
        this.id = id;  
    }  

    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;  
    }  

    public String getPassword() {  
        return password;  
    }  

    public void setPassword(String password) {  
        this.password = password;  
    }  

    // 用于字符串表示的方法  
    @Override  
    public String toString() {  
        return "User{" +  
               "id=" + id +  
               ", username='" + username + '\'' +  
               ", email='" + email + '\'' +  
               ", password='" + password + '\'' +  
               '}';  
    }  

    // 用于对象比较的方法  
    @Override  
    public boolean equals(Object o) {  
        if (this == o) return true;  
        if (o == null || getClass() != o.getClass()) return false;  
        User user = (User) o;  
        return id != null ? id.equals(user.id) : user.id == null;  
    }  

    // 用于散列值计算的方法  
    @Override  
    public int hashCode() {  
        return id != null ? id.hashCode() : 0;  
    }  
}

但是,利用LOMBOK,事情会变成这样——

    import lombok.AllArgsConstructor;  
    import lombok.Data;  
    import lombok.NoArgsConstructor;  
    import lombok.Builder;  
    import lombok.NonNull;  

    import javax.persistence.Entity;  
    import javax.persistence.GeneratedValue;  
    import javax.persistence.GenerationType;  
    import javax.persistence.Id;  

    @Entity  
    @Data  
    @NoArgsConstructor  
    @AllArgsConstructor  
    @Builder  
    public class User {  

        @Id  
        @GeneratedValue(strategy = GenerationType.IDENTITY)  
        private Long id;  

        @NonNull  
        private String username;  

        @NonNull  
        private String email;  

        private String password;  

        // 这里可以添加一些额外的业务逻辑或方法  
    }

搞定啦!!!我们已经移除了样板代码。(即使大多数这类代码可以通过标准IDE自动生成。)我们让实体类变得简洁。这不正是现代Java开发所追求的吗?

我们将在接下来的文章里更详细地看看其中一些标注 :)

你可以在这里看看关于 Records vs Lombok 的内容

模板之争:Records vs. Lombok Lombok已经存在了十几年了,我们需要决定是否要替换由Lombok生成的…
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消