盘点Lombok的几个骚操作,你知道几个?

开发 前端
Lombok并不是万能的,它也有一些局限性和争议。比如,有些人认为Lombok的注解会破坏代码的可读性,因为你需要了解Lombok的注解才能理解代码的含义。

兄弟们,今天咱们要聊的,可是一个能让你的代码瞬间变得简洁、高效,还能让你少敲不少键盘的神器——Lombok!如果你还没听说过Lombok,那你可得好好听我说了,保证让你大开眼界,从此爱不释手!

首先,咱们得明白,Lombok到底是干啥的。简单来说,Lombok就是一个Java库,它可以通过注解的方式,自动帮你生成那些繁琐的样板代码,比如getter、setter、构造方法、toString、equals、hashCode等等。这样一来,你就可以少写很多重复的代码,把精力集中在更有价值的地方。

那么,Lombok到底有哪些骚操作呢?别急,我这就给你一一道来。

一、@Data注解:一键生成所有getter、setter和toString

要说Lombok最常用的注解,那肯定是@Data了。这个注解简直就是个懒人神器,它会自动为你生成类的所有字段的getter、setter方法,以及一个toString方法。这样一来,你就不用手动去敲这些代码了,既省时又省力。

举个例子,假设你有一个User类,里面有id、name、age等字段。如果你不用Lombok,那你就得手动为这些字段编写getter、setter和toString方法。但如果你用了Lombok的@Data注解,那就只需要在类上加一行代码,就可以自动生成这些方法了。

import lombok.Data;


@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

怎么样,是不是很简单?这样一来,你就可以少写很多重复的代码,把精力集中在业务逻辑上了。

二、@NoArgsConstructor、@AllArgsConstructor和@RequiredArgsConstructor:灵活生成构造方法

除了@Data注解外,Lombok还提供了几个专门用于生成构造方法的注解,分别是@NoArgsConstructor、@AllArgsConstructor和@RequiredArgsConstructor。

  • @NoArgsConstructor:无参构造方法。如果你不需要为类生成任何参数的构造方法,那就可以用这个注解。
  • @AllArgsConstructor:全参构造方法。如果你需要为类生成包含所有字段的构造方法,那就可以用这个注解。
  • @RequiredArgsConstructor:必填字段构造方法。这个注解会生成一个包含所有final字段和带有@NonNull注解字段的构造方法。

这三个注解的使用也非常简单,只需要在类上加上对应的注解就可以了。这样一来,你就可以根据需要灵活地生成各种构造方法了。

三、@Builder注解:构建者模式,让你的对象创建更加优雅

在Java中,构建者模式是一种常用的设计模式,它可以让你以一种更加灵活和可读的方式创建对象。Lombok的@Builder注解就是用来实现构建者模式的。

当你使用@Builder注解时,Lombok会自动为你生成一个静态的内部Builder类,这个类包含了所有字段的setter方法,以及一个build方法来生成最终的对象。这样一来,你就可以通过链式调用的方式来设置对象的字段值了。

import lombok.Builder;
import lombok.Data;


@Data
@Builder
public class User {
    private Long id;
    private String name;
    private Integer age;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

然后,你就可以像下面这样创建User对象了:

User user = User.builder()
                .id(1L)
                .name("张三")
                .age(25)
                .build();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

怎么样,是不是感觉代码瞬间变得优雅多了?

四、@NonNull注解:防止空指针异常

在Java中,空指针异常(NullPointerException)是一个常见的问题。为了防止空指针异常的发生,我们可以在字段上使用@NonNull注解来标记该字段不能为null。

当你使用了@NonNull注解后,Lombok会在生成的getter方法、构造方法等地方添加空值检查,如果传入的值为null,则会抛出空指针异常。这样一来,你就可以在编译期就捕获到潜在的空指针问题,提高代码的健壮性。

import lombok.NonNull;
import lombok.Data;


@Data
public class User {
    @NonNull
    private Long id;
    private String name;
    private Integer age;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

在这个例子中,如果你尝试创建一个id为null的User对象,Lombok会为你抛出空指针异常,防止你在运行时遇到空指针问题。

五、@Cleanup注解:自动关闭资源

在Java中,很多资源都是需要手动关闭的,比如文件、数据库连接等。如果你忘记关闭这些资源,就可能会导致资源泄露等问题。Lombok的@Cleanup注解就是用来解决这个问题的。

当你使用@Cleanup注解时,Lombok会自动为你生成一个try-with-resources语句来关闭资源。这样一来,你就不用手动去写try-catch-finally来关闭资源了。

import lombok.Cleanup;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;


public class FileUtil {
    public static void readFile(String filePath) throws IOException {
        @Cleanup BufferedReader reader = new BufferedReader(new FileReader(filePath));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        // 这里不需要手动关闭reader,Lombok会自动为你生成try-with-resources语句来关闭它
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

在这个例子中,@Cleanup注解会自动为BufferedReader生成一个try-with-resources语句,确保在读取完文件后能够自动关闭BufferedReader。

六、@Synchronized注解:轻松实现线程安全

在Java中,实现线程安全通常需要使用同步机制。Lombok提供了一个@Synchronized注解,它可以让你轻松地实现同步方法。

当你使用@Synchronized注解时,Lombok会自动为你生成一个同步块,确保在同一个时刻只有一个线程能够执行该方法。这样一来,你就可以不用手动去写synchronized关键字了。

import lombok.Synchronized;


public class Counter {
    private int count = 0;


    @Synchronized
    public void increment() {
        count++;
    }


    public int getCount() {
        return count;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

在这个例子中,increment方法被@Synchronized注解修饰了,这意味着在同一个时刻只有一个线程能够执行这个方法。这样一来,你就可以保证count字段的线程安全性了。

七、@Log注解:快速生成日志对象

在Java中,日志是一个非常重要的功能。Lombok提供了一个@Log注解,它可以让你快速地生成日志对象。

当你使用@Log注解时,Lombok会自动为你生成一个日志对象,你可以通过这个对象来记录日志信息。Lombok支持多种日志框架,比如SLF4J、Log4j、Log4j2等。你只需要在项目的依赖中引入对应的日志框架依赖,Lombok就会自动为你生成对应的日志对象。

import lombok.extern.slf4j.Log;


@Log
public class LogExample {
    public static void main(String[] args) {
        log.info("This is an info message");
        log.error("This is an error message");
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

在这个例子中,@Log注解会自动为你生成一个SLF4J的日志对象,你可以通过log对象来记录日志信息。

八、@Value注解:不可变对象

在Java中,不可变对象是一种常用的设计模式,它可以保证对象的状态在创建后不会被改变。Lombok提供了一个@Value注解,它可以让你快速地创建不可变对象。

当你使用@Value注解时,Lombok会自动为你生成所有的字段的getter方法、equals方法、hashCode方法和toString方法,并且会将所有的字段都设置为final,确保对象的不可变性。

import lombok.Value;


@Value
public class Point {
    private final int x;
    private final int y;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

在这个例子中,Point类是一个不可变对象,它的x和y字段在创建后就不能被改变了。

总结

好了,以上就是我对Lombok的一些骚操作的盘点。相信大家看完之后,一定对Lombok有了更深入的了解。Lombok确实是一个非常强大的工具,它可以帮助我们减少重复的代码,提高代码的可读性和可维护性。但是,我们也要注意不要过度依赖Lombok,还是要掌握Java的基础语法和常用的设计模式,这样才能写出更加优秀的代码。

最后,我想说的是,Lombok并不是万能的,它也有一些局限性和争议。比如,有些人认为Lombok的注解会破坏代码的可读性,因为你需要了解Lombok的注解才能理解代码的含义。但是,我认为这些争议都是可以通过学习和实践来解决的。只要我们掌握了Lombok的用法和底层原理,就可以更好地利用它来提高我们的编程效率。

好了,今天的分享就到这里了。希望大家能够喜欢这篇文章,也希望Lombok能够成为你编程路上的得力助手!如果你对Lombok还有其他的看法或者疑问,欢迎在评论区留言和我交流。

责任编辑:武晓燕 来源: 石杉的架构笔记
相关推荐

2024-04-30 10:08:00

Lombok开发字段

2021-02-27 17:13:21

前端代码逻辑

2021-12-14 09:12:40

Gopher结构体接口

2022-01-19 09:03:01

工具

2023-05-29 09:41:42

操作系统计算机系统

2023-12-06 14:23:24

2021-11-04 11:54:30

Linux内存系统

2019-03-05 11:22:17

操作系统调度算法

2025-02-26 00:56:24

.Net开源项目

2024-03-01 13:48:00

Git配置系统

2020-11-23 11:30:00

IDEA技巧开发

2024-01-18 00:16:07

2021-10-12 09:20:02

数据库SQL脚本

2023-04-27 08:15:09

2024-09-05 14:50:31

2024-02-19 08:07:31

Go版本语言

2022-06-04 08:29:27

awk命令BEGIN

2023-10-31 08:23:54

网络命令Linux

2021-10-14 06:52:47

算法校验码结构

2022-04-13 10:05:48

网关Flowable事件订阅
点赞
收藏

51CTO技术栈公众号