lombok 的使用讲解

前言

在项目中经常会看到lombok的应用,此文作为科普帖,详细介绍lombok

1. 基本知识

简介:
Project Lombok是一款用于Java开发的工具,旨在通过自动生成样板代码来简化Java代码的编写。
它通过注解(Annotation)的方式,帮助开发人员自动生成一些常见的Java代码,如Getter、Setter、构造函数等,从而减少样板代码的编写,提高开发效率。
工作原理:
Lombok通过在Java源代码中使用注解,实现了在编译阶段自动生成代码的功能。
当开发人员在类或字段上使用Lombok提供的注解时,Lombok在编译源代码时会通过插入AST(Abstract Syntax Tree)操作,在生成的Java字节码中加入相应的代码。这样,在运行时,代码中就包含了通过注解生成的代码,而开发人员无需手动编写这些冗长的代码。

其优缺点如下:

优点缺点
1.简化代码: Lombok通过自动生成常见的样板代码,减少了开发人员需要编写的代码量,提高了代码的简洁性。
2. 提高开发效率: 通过自动生成代码,开发人员能够更专注于业务逻辑,减少了重复性劳动,提高了开发效率。
3. 可读性: 由于生成的代码是标准的、一致的,提高了代码的可读性。
1.隐藏细节: 自动生成的代码可能会隐藏一些细节,开发人员可能不太容易理解具体的实现方式。
2. 不适用于所有场景: Lombok适用于生成一些常见的代码,但并不适用于所有的场景。在某些复杂的情况下,可能需要手动编写代码。
3. 工具依赖: 开发团队需要在开发环境中安装Lombok插件或者通过构建工具配置来支持Lombok,这增加了项目的工具依赖。

2. 代码应用

再最新版的idea中都有自动捆绑该插件,如果没有无法使用lombok则在软件中添加即可

先引入Maven文件中的依赖:

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>>${lombok.version}</version>
	<scope>provided</scope>
</dependency>

对于lombok的注解,主要有如下:

  • @Setter 和 @Getter
import lombok.Getter;
import lombok.Setter;

public class MyClass {
    @Getter
    @Setter
    private String name;
}

等价于:

public class MyClass {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • @AllArgsConstructor
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
public class MyClass {
    private String name;
    private int age;
}

等价于:

public class MyClass {
    private String name;
    private int age;

    public MyClass() {
        // 无参构造方法
    }

    public MyClass(String name, int age) {
        // 有参构造方法
        this.name = name;
        this.age = age;
    }
}
  • @NoArgsConstructor :该注解使用在类上,提供无参构造

  • @Data :(包含了@Getter、@Setter、@ToString、@EqualsAndHashCode和@AllArgsConstructor的功能)
    需要注意的是:同时使用 @Data 和 @AllArgsConstructor 后 ,默认的无参构造函数失效,如果需要它,要重新设置 @NoArgsConstructor

import lombok.Data;

@Data
public class MyClass {
    private String name;
    private int age;
}
  • @Log(这是一个泛型注解,具体有很多种形式):@Slf4j :在类上注解后,可直接调用log
log.info(xxxx);
  • @ToString :该注解使用在类上,编译后toString方法返回将会以字段的名称-值的形式输出

  • @EqualsAndHashCode :该注解使用在类上,同时生成 equals 和 hashCode 。

  • @NonNull :增加不为空判断

public NonNullExample(@NonNull Person person) {
	this.name = person.getName();
}

转换为:

public NonNullExample(@NonNull Person person) {
	if (person == null) {
		throw new NullPointerException("person");
	}
	this.name = person.getName();
}
  • @Cleanup:自动化关闭流,相当于 try with resource
@Cleanup
InputStream in = new FileInputStream(args[0]);
@Cleanup
OutputStream out = new FileOutputStream(args[1]);
  • @SneakyThrows :当我们需要抛出异常,在当前方法上调用,不用显示的在方法名后面写 throw
@SneakyThrows(Exception.class)
  • @Synchronized :方法中所有的代码都加入到一个代码块中,默认静态方法使用的是全局锁,普通方法使
    用的是对象锁,当然也可以指定锁的对象。
private final Object lock = new Object();
	@Synchronized("lock")
	public void foo() {
		// Do something
	}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用Lombok时,可以通过使用不同的注解来自动生成不同的方法。以下是对每种注解的简要解释: 1. `@Getter` 和 `@Setter`:这两个注解用于自动生成属性的getter和setter方法。通过在类或属性上添加这些注解,可以避免手动编写这些重复的代码。例如,`@Getter @Setter private String name;` 将自动生成 `getName()` 和 `setName()` 方法。 2. `@NoArgsConstructor`、`@RequiredArgsConstructor` 和 `@AllArgsConstructor`:这些注解用于自动生成构造函数。`@NoArgsConstructor` 自动生成无参构造函数,`@RequiredArgsConstructor` 自动生成带有特定参数的构造函数(根据标记了 `@NonNull` 的属性生成参数),`@AllArgsConstructor` 自动生成包含所有属性的构造函数。 3. `@ToString`:该注解用于自动生成 `toString()` 方法。它会按照类的属性顺序生成一个格式化的字符串,方便对象的打印和调试。 4. `@EqualsAndHashCode`:该注解用于自动生成 `equals()` 和 `hashCode()` 方法。它会根据类中的所有属性生成相应的方法,方便对象的比较和哈希计算。 5. `@Slf4j`:该注解用于自动生成日志记录器。它会在类中创建一个名为 `log` 的静态日志记录器,可以直接使用它进行日志记录,无需手动创建 Logger 对象。 6. `@Builder`:该注解用于实现链式调用。通过在类上添加 `@Builder` 注解,可以使用链式调用的方式创建复杂的对象。它还提供了一些便捷的方法,如默认值设置、空指针检查等。 这些注解使用可以减少开发人员编写重复代码的工作量,提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值