Lombok新版超全面使用教程

一、Lombok介绍

Lombok是一个Java库,可以通过注解来简化Java类的编写,减少冗余的样板代码。它提供了一系列的注解,用于自动生成常见的代码,如getter和setter方法、构造函数、equals和hashCode方法、toString方法等。通过使用Lombok,开发者可以更加专注于业务逻辑的实现,减少了繁琐的重复劳动。

二、Lombok常用注解

2.1  @Getter/@Setter 

@Getter和@Setter注解是Lombok库的一部分,它们会自动为你的类生成getter和setter方法。这些方法通常用于访问类的私有字段。可以添加在类上或者方法上。

这是如何使用这些注解的一些基本示例:

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

    private String name;
    private int age;
    private String password;

}

AccessLevel是Lombok中的一个属性,用于指定生成的getter、setter方法的访问级别。

AccessLevel有三个可选值:

  1. AccessLevel.PUBLIC:生成public访问级别的getter方法。
  2. AccessLevel.PROTECTED:生成protected访问级别的getter方法。
  3. AccessLevel.NONE:不生成getter方法,属性保持私有,无法从外部访问。

 上面的基本示例代码如果希望外部不能操作password属性,即可使用AccessLevel属性

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

    private String name;
    private int age;

    @Getter(AccessLevel.NONE)
    @Setter(AccessLevel.NONE)
    private String password;
}

 

2.2  @ToString

@ToString是Lombok库中的一个注解,用于自动生成toString方法。通过在类上添加@ToString注解,Lombok将根据类的字段生成一个toString方法,返回一个包含类名和字段值的字符串。

下面是一个使用@ToString注解的示例:

import lombok.ToString;

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

 在这个示例中,Lombok会自动生成一个toString方法,如下所示:

public String toString() {
    return "Person(name=" + this.getName() + ", age=" + this.getAge() + ")";
}

2.3  @EqualsAndHashCode

@EqualsAndHashCode是Lombok库中的一个注解,它自动生成equals()hashCode()方法。当你在类上添加@EqualsAndHashCode注解后,Lombok会根据类的字段生成相应的equals()hashCode()方法。

equals()方法用于比较两个对象是否相等,而hashCode()方法返回对象的哈希码值。在Java中,这两个方法是Object类的一部分,用于支持对象比较和散列操作。

以下是一个使用@EqualsAndHashCode注解的示例:

import lombok.EqualsAndHashCode;

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

Lombok将根据这个类的字段生成以下equals()hashCode()方法:

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return age == person.age && Objects.equals(name, person.name);
}

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

2.4  @NonNull

@NonNull 是 Lombok 库中的一个注解,用于指示一个参数、返回值或字段不能为 null。当你在类的方法或字段上使用 @NonNull 注解时,Lombok 会自动生成校验代码,确保该方法或字段在使用前不为 null。

以下是一个使用 @NonNull 注解的示例:

import lombok.NonNull;

public class Example {
    @NonNull
    private String name;

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

    public String getName() {
        return name;
    }
}

在上面的示例中,name 字段和 setName() 方法都使用了 @NonNull 注解。这表示 name 字段不能为 null,如果尝试将 null 值赋给 name,Lombok 将自动生成校验代码抛出异常。同样,setName() 方法也不会允许传入 null 参数。

使用 @NonNull 注解可以帮助开发人员避免空指针异常,并在编译时检查非空约束。它是一种方便的工具,可以提高代码的可读性和健壮性。

2.5  @NoArgsConstructor

@NoArgsConstructor 是 Lombok 库中的一个注解,用于自动生成一个无参构造函数。当你在类上添加 @NoArgsConstructor 注解时,Lombok 会根据类的字段生成一个无参构造函数。

2.6  @RequiredArgsConstructor(了解)

 @RequiredArgsConstructor 是 Lombok 库中的一个注解,它会自动生成一个包含所有需要特殊处理(例如,需要使用 final 修饰符或@NonNull注解)的参数的构造函数。当你在类上添加 @RequiredArgsConstructor 注解时,Lombok 会根据类的字段生成一个构造函数,该构造函数的参数是使用final关键字修饰的参数或使用@NonNull注解的参数。

2.7  @AllArgsConstructor

@AllArgsConstructor 是 Lombok 库中的一个注解,用于自动生成一个包含所有字段的构造函数。当你在类上添加 @AllArgsConstructor 注解时,Lombok 会为该类生成一个包含所有字段的构造函数。这个构造函数会使用参数的名字作为参数的名称。

2.8  @Data(最常用)

@Data 是 Lombok 库中的一个注解,它为 Java 类自动生成 getter、setter 方法、toString() 方法、equals()、hashCode() 和 和特殊处理(使用 final 修饰符或@NonNull注解)的参数的构造函数。通过在类上添加 @Data 注解,Lombok 会根据类的字段生成这些方法。

具体来说,@Data 注解包含以下四个子注解:

  1. @Getter 和 @Setter:为类的字段生成 getter 和 setter 方法。
  2. @ToString:为类生成 toString() 方法,该方法返回类的实例的字符串表示形式。
  3. @EqualsAndHashCode:为类生成 equals() 和 hashCode() 方法。
  4. @RequiredArgsConstructor:为类生成一个包含所有需要特殊处理(使用 final 修饰符或@NonNull注解)的参数的构造函数。

请注意,如果你使用 @Data 注解,Lombok 会自动生成这些方法,而无需手动编写这些代码。

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

2.9  @Builder(炫技必备,链式编程)

@Builder 是 Lombok 库中的一个注解,用于自动生成一个 builder 类。通过在类上添加 @Builder 注解,Lombok 会为该类生成一个 builder 类,该 builder 类具有用于设置每个字段的 setter 方法以及一个用于创建最终对象的 build() 方法。

使用 @Builder 注解可以简化代码,并使代码更易于阅读和维护。它使得代码更加清晰明了,避免了手动编写 builder 类的繁琐过程。

周式概括:在实体类上使用@Builder注解后,在实体类中会生成一个builder()方法,该方法用于return一个对应的builder类(构造器)。在构建器中,实体类中的每个参数,都会对应创建类似于 setter 的方法,方法名与该参数名相同,并且返回值是构建器本身(便于链式调用)。还会提供一个会build 方法,return实体类对象。

@Builder
public class User {
    private String username;
    private String password;
}

编译后

public class User {
    private String username;
    private String password;
    
    User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    public static User.UserBuilder builder() {
        return new User.UserBuilder();
    }
	
    public static class UserBuilder {
        private String username;
        private String password;
        
        UserBuilder() {}
		
        public User.UserBuilder username(String username) {
            this.username = username;
            return this;
        }
        
        public User.UserBuilder password(String password) {
            this.password = password;
            return this;
        }
        
        public User build() {
            return new User(this.username, this.password);
        }
        
		public String toString() {
            return "User.UserBuilder(username=" + this.username + ", password=" + this.password + ")";
        }
    }
}

1.在实体类中:会创建一个 builder 方法,它的目的是用来创建构建器

2.创建一个名为 ThisClassBuilder 的内部静态类,并具有和实体类相同的属性(称为构建器)

3.在构建器中:对于目标类中的所有的属性和未初始化的 final 字段,都会在构建器中创建对应属性

4.在构建器中:创建一个无参的 default 构造函数

5.在构建器中:实体类中的每个参数,都会对应创建类似于 setter 的方法,方法名与该参数名相同。 并且返回值是构建器本身(便于链式调用)

6.在构建器中:会创建一个 build 方法,调用 build 方法,就会根据设置的值进行创建实体对象

7.在构建器中:会生成一个 toString 方法

USer user = User.builder().username("admin").password("admin).build();

2.10  @Slf4j

@Slf4j是Lombok库中的一个注解,它可以为Java类自动添加一个名为log的日志记录器。@Slf4j注解使用了SLF4J(Simple Logging Facade for Java)日志框架。通过使用@Slf4j注解,您无需手动创建private static final Logger log = LoggerFactory.getLogger(YourClassName.class)这样的日志记录器,而是直接使用log变量进行日志记录。

使用@Slf4j注解的示例代码如下所示:

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyClass {
    public void myMethod() {
        log.debug("Debug log message");
        log.info("Info log message");
        log.error("Error log message");
    }
}

在上述代码中,通过使用@Slf4j注解,即可在MyClass中自动添加一个名为log的日志记录器。然后,您可以在方法中使用log变量来记录日志。在示例中,使用了不同的日志级别(debug、info和error)记录不同级别的日志信息。

三、Lombok使用 

3.1 引入依赖:

 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
</dependency>

3.2 安装插件(第一次使用时)

IDEA中File->Settings->Plugins,搜索安装Lombok插件。

3.3 在Java类中使用Lombok注解

在Java类中使用Lombok注解:您可以在需要简化的Java类中使用Lombok的注解来自动生成代码。以下是一些常用的Lombok注解:

通过在类上添加这些注解,Lombok会自动生成相应的代码。

  • @Getter / @Setter: 自动生成字段的getter和setter方法。
  • @ToString: 自动生成toString()方法,用于输出对象的字符串表示。
  • @EqualsAndHashCode: 自动生成equals()hashCode()方法。
  • @NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor: 自动生成无参数构造函数、指定参数的构造函数或包含所有参数的构造函数。
  • @Data: 是一个组合注解,相当于同时使用了@Getter@Setter@ToString@EqualsAndHashCode、@RequiredArgsConstructor注解。
  • @Slf4j: 自动生成日志记录器。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值