欢迎光临
我们一直在努力

【Lombok]】快速上手:消灭 Getter/Setter 样板代码

目录

一、什么是 Lombok?

1.1 没有 Lombok 的痛苦

1.2 有了 Lombok 的优雅

二、快速入门

2.1 添加依赖

2.2 安装 IDE 插件

2.3 启用注解处理

三、第一个 Lombok 程序

3.1 创建实体类

3.2 使用实体类

四、@Data 注解详解

4.1 等价代码

五、常见问题

5.1 Lombok 不生效?

5.2 @Data 的坑

六、总结

下一篇

参考资料


你是否厌倦了为每个字段手写 getter 和 setter?Lombok 来拯救你了!


一、什么是 Lombok?

Lombok 是一个 Java 工具库,它通过注解在编译期自动生成样板代码,比如:

  • getter / setter 方法
  • toString() 方法
  • equals() 和 hashCode() 方法
  • 构造方法

1.1 没有 Lombok 的痛苦

public class User {
private Long id;
private String name;
private Integer age;
private String email;

// getter 方法
public Long getId() {
return id;
}

public String getName() {
return name;
}

public Integer getAge() {
return age;
}

public String getEmail() {
return email;
}

// setter 方法
public void setId(Long id) {
this.id = id;
}

public void setName(String name) {
this.name = name;
}

public void setAge(Integer age) {
this.age = age;
}

public void setEmail(String email) {
this.email = email;
}

// toString 方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\\'' +
", age=" + age +
", email='" + email + '\\'' +
'}';
}

// equals 和 hashCode
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id) &&
Objects.equals(name, user.name) &&
Objects.equals(age, user.age) &&
Objects.equals(email, user.email);
}

@Override
public int hashCode() {
return Objects.hash(id, name, age, email);
}
}

问题:4 个字段就写了 50+ 行代码,如果有 10 个字段呢?

1.2 有了 Lombok 的优雅

import lombok.Data;

@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}

效果:自动生成所有 getter、setter、toString、equals、hashCode 方法!


二、快速入门

2.1 添加依赖

Maven:

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>

Gradle:

compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'

2.2 安装 IDE 插件

  • IntelliJ IDEA:安装 Lombok 插件(Settings → Plugins → 搜索 Lombok)
  • Eclipse:下载 lombok.jar,运行 java -jar lombok.jar 安装

2.3 启用注解处理

IntelliJ IDEA:

  • Settings → Build → Compiler → Annotation Processors
  • 勾选 "Enable annotation processing"

  • 三、第一个 Lombok 程序

    3.1 创建实体类

    import lombok.Data;
    import lombok.AllArgsConstructor;
    import lombok.NoArgsConstructor;

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
    private Long id;
    private String name;
    private Integer age;
    }

    3.2 使用实体类

    public class Main {
    public static void main(String[] args) {
    // 使用无参构造
    User user1 = new User();
    user1.setId(1L);
    user1.setName("张三");
    user1.setAge(25);
    System.out.println(user1); // User(id=1, name=张三, age=25)

    // 使用全参构造
    User user2 = new User(2L, "李四", 30);
    System.out.println(user2.getName()); // 李四

    // equals 和 hashCode
    System.out.println(user1.equals(user2)); // false
    }
    }


    四、@Data 注解详解

    @Data 是 Lombok 最常用的注解,它是以下注解的组合:

    注解作用
    @Getter 生成所有字段的 getter 方法
    @Setter 生成所有字段的 setter 方法
    @ToString 生成 toString() 方法
    @EqualsAndHashCode 生成 equals() 和 hashCode() 方法
    @RequiredArgsConstructor 生成包含 final 字段的构造方法

    4.1 等价代码

    @Data
    public class User {
    private Long id;
    private String name;
    }

    // 等价于:
    @Getter
    @Setter
    @ToString
    @EqualsAndHashCode
    @RequiredArgsConstructor
    public class User {
    private Long id;
    private String name;
    }


    五、常见问题

    5.1 Lombok 不生效?

    检查清单:

  • ✅ 依赖是否添加正确
  • ✅ IDE 插件是否安装
  • ✅ 注解处理是否启用
  • ✅ 是否重新构建项目
  • 5.2 @Data 的坑

    @Data 会生成 equals() 和 hashCode() 方法,但不会包含父类字段。

    @Data
    public class Student extends User {
    private String school;
    }

    // Student 的 equals() 只比较 school 字段,不比较 User 的字段!

    解决方案:

    @Data
    @EqualsAndHashCode(callSuper = true) // 包含父类字段
    public class Student extends User {
    private String school;
    }


    六、总结

    特性说明
    作用 减少样板代码
    原理 编译期自动生成代码
    常用注解 @Data、@Getter、@Setter
    优势 代码简洁、减少错误、易于维护
    注意事项 需要 IDE 插件支持

    赞(0)
    未经允许不得转载:171主机测评 » 【Lombok]】快速上手:消灭 Getter/Setter 样板代码
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址