💡 一则也许对你有用的小广告 🏆

欢迎飞飞程序员   ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论

  • 正在进行中的项目:《FFBlog知识付费博客项目》 正在持续更新中,基于 Spring Boot 3.x + JDK 21...,点击查看 ;
  • 《从零开发:FFBlog知识付费博客项目(全栈开发)》 演示链接: https://ffblog.ffcxy.com/  ;

截止目前, 飞飞  正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观

Lombok 是一个 Java 库,通过注解的方式自动生成 getter/setter、构造方法、equals/hashCode 等方法,可以大大减少样板代码,提高开发效率。

安装 Lombok

1. Maven 项目添加依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version> <!-- 使用最新版本 -->
    <scope>provided</scope>
</dependency>

2. IDE 安装插件

  • IntelliJ IDEA: 需要安装 Lombok 插件
  • Eclipse: 需要下载 lombok.jar 并运行安装

常用注解详解

1. @Getter/@Setter

自动生成 getter 和 setter 方法。

@Getter
@Setter
public class User {
    private String name;
    private int age;
}

等效于:

public class User {
    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; }
}

2. @ToString

自动生成 toString() 方法。

@ToString
public class User {
    private String name;
    private int age;
}

3. @EqualsAndHashCode

自动生成 equals() 和 hashCode() 方法。

@EqualsAndHashCode
public class User {
    private String name;
    private int age;
}

4. @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

自动生成构造方法:

  • @NoArgsConstructor: 无参构造方法
  • @RequiredArgsConstructor: 为所有 final 字段和 @NonNull 字段生成构造方法
  • @AllArgsConstructor: 全参构造方法
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private int age;
}

5. @Data

组合注解,相当于 @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor

@Data
public class User {
    private String name;
    private int age;
}

6. @Builder

提供建造者模式支持。

@Builder
public class User {
    private String name;
    private int age;
}

// 使用
User user = User.builder()
    .name("张三")
    .age(25)
    .build();

7. @Slf4j

自动生成日志对象。

@Slf4j
public class UserService {
    public void doSomething() {
        log.info("Doing something...");
    }
}

8. @NonNull

自动生成非空检查。

public class User {
    @Setter @NonNull
    private String name;
}

// 相当于
public void setName(@NonNull String name) {
    if (name == null) {
        throw new NullPointerException("name is marked non-null but is null");
    }
    this.name = name;
}

9. @Value

不可变类注解,相当于 final + @Getter + @ToString + @EqualsAndHashCode + @AllArgsConstructor

@Value
public class ImmutableUser {
    String name;
    int age;
}

10. @Cleanup

自动管理资源,确保调用 close() 方法。

public void copyFile(String in, String out) throws IOException {
    @Cleanup InputStream is = new FileInputStream(in);
    @Cleanup OutputStream os = new FileOutputStream(out);
    byte[] b = new byte[1024];
    int r;
    while ((r = is.read(b)) != -1) {
        os.write(b, 0, r);
    }
}

高级用法

1. 配置 Lombok 行为

可以在项目根目录创建 lombok.config 文件来配置 Lombok 行为:

# 禁止生成 @Data 的 toString 方法
lombok.data.flagUsage = WARNING

2. 自定义构造方法

可以与 Lombok 生成的构造方法共存:

@AllArgsConstructor
public class User {
    private String name;
    private int age;
    
    public User(String name) {
        this(name, 0);
    }
}

3. 排除字段

@ToString(exclude = "age")
@EqualsAndHashCode(exclude = {"id", "age"})
public class User {
    private String id;
    private String name;
    private int age;
}

注意事项

  1. IDE 支持: 必须安装 Lombok 插件才能正确识别生成的代码
  2. 序列化: 使用 @Data 或 @Value 时要注意序列化问题
  3. 继承: 使用 @EqualsAndHashCode 和 @ToString 时要注意继承关系
  4. 调试: 由于代码是编译时生成的,调试时可能会有些不便

Lombok 能显著减少样板代码,但也要根据项目实际情况合理使用,避免过度依赖。

上一篇 通过实际代码来解释 Service 接口和ServiceImpl 实现类的关系
下一篇 java中equals的详细用法

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~