Lombok 主要作用是什么?它是干嘛的?
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新开坑项目:《Spring AI 项目实战(问答机器人、RAG 增强检索、联网搜索)》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21...,点击查看 ;
- 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍 ; 演示链接: http://116.62.199.48:7070/ ;
- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 110w+ 字,讲解图 4421+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 4000+ 小伙伴加入学习 ,欢迎点击围观
Lombok 主要作用是什么?它是干嘛的?
它是什么?
Lombok 是一个超酷的 Java 库,旨在通过减少样板代码来提升开发效率。Java 语言中有许多重复且冗长的代码,比如 getter/setter、构造方法、equals 和 hashCode 方法等,这些代码往往是必需的,但会增加代码量,使类变得臃肿、可读性下降。Lombok 提供了各种注解,自动生成这些样板代码,帮助开发者专注于核心业务逻辑。
主要作用
- 
减少样板代码:Lombok 能自动生成很多 Java 类中常见的样板代码,例如 getter/setter方法、构造函数、toString()、equals()和hashCode()等。这些方法通常没有复杂逻辑,却不可或缺,Lombok 通过注解让这些方法自动生成,使代码更简洁。
- 
提高代码可读性:Lombok 避免了大量的重复代码,使类结构更清晰,让开发人员更容易理解类的核心逻辑。 
- 
节省开发时间:减少重复性代码编写时间,加快开发流程。 
- 
减少代码出错的机会:自动生成的代码不易出错,避免了手动编写 getter/setter、构造函数时可能出现的错误,尤其是在较大的项目中。
常用注解
以下是一些 Lombok 中的常用注解,它们分别解决不同类型的样板代码需求:
- @Getter/- @Setter:为类中的字段自动生成- getter和- setter方法,减少手动创建这些方法的时间。
- @ToString:生成- toString()方法,方便打印对象内容,用于调试。
- @EqualsAndHashCode:自动生成- equals()和- hashCode()方法,尤其适合对集合中的对象进行比较和查找。
- @NoArgsConstructor/- @AllArgsConstructor/- @RequiredArgsConstructor:自动生成无参构造函数、全参构造函数以及包含必要参数的构造函数。
- @Data:这是一个复合注解,等效于- @Getter、- @Setter、- @ToString、- @EqualsAndHashCode和- @RequiredArgsConstructor的组合,适合需要完整数据操作的简单类。
- @Builder:实现构建者模式,为类创建复杂对象时提供灵活的方式。
- @Value:用于创建不可变对象(immutable objects),类似于- @Data,但所有字段都是- final。
- @Slf4j:自动为类注入- Slf4j日志对象,方便记录日志。
- @SneakyThrows:用于 “隐藏” 方法抛出的检查型异常(checked exception),避免显式声明- throws。
使用示例
以下是一个使用 Lombok 简化代码的示例。假设我们有一个 Person 类:
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
	// 姓名
    private String name;
    // 年龄
    private int age;
}
上面的代码通过
@Data注解自动生成了getter、setter、toString()、equals()、hashCode()等方法。@NoArgsConstructor和@AllArgsConstructor则分别生成了无参构造器和包含所有字段的全参构造器。相比于手动编写这些方法,Lombok 让代码变得更加简洁。
以上代码相当于:
public class Person {
    private String name;
    private int age;
    public String getName() {
        return this.name;
    }
    public int getAge() {
        return this.age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof Person)) {
            return false;
        } else {
            Person other = (Person)o;
            if (!other.canEqual(this)) {
                return false;
            } else if (this.getAge() != other.getAge()) {
                return false;
            } else {
                Object this$name = this.getName();
                Object other$name = other.getName();
                if (this$name == null) {
                    if (other$name != null) {
                        return false;
                    }
                } else if (!this$name.equals(other$name)) {
                    return false;
                }
                return true;
            }
        }
    }
    protected boolean canEqual(Object other) {
        return other instanceof Person;
    }
    public int hashCode() {
        int PRIME = true;
        int result = 1;
        result = result * 59 + this.getAge();
        Object $name = this.getName();
        result = result * 59 + ($name == null ? 43 : $name.hashCode());
        return result;
    }
    public String toString() {
        String var10000 = this.getName();
        return "Person(name=" + var10000 + ", age=" + this.getAge() + ")";
    }
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
局限性与注意事项
- 
学习曲线:Lombok 注解生成的代码不可见,过度依赖 Lombok 可能会导致新成员理解代码逻辑困难,特别是对未熟悉该工具的团队成员。 
- 
兼容性问题:Lombok 基于注解处理器和字节码操作,某些 IDE、框架、Java 版本升级时可能会导致 Lombok 无法正常工作,需要额外的配置或更新。 
- 
代码调试:Lombok 自动生成的代码在调试时不可见,可能会影响对代码执行流程的理解。尤其是在调试 equals、hashCode或复杂构造器等方法时。
总结
Lombok 是一个非常实用的 Java 工具,通过自动生成样板代码,帮助开发人员提升开发效率和代码简洁性。然而,使用时也需要平衡其便利性与代码可读性之间的关系,确保团队中的每个人都能理解和掌握这些工具带来的影响。