Lombok 的介绍和使用

Lombok是一个可以通过注解简化Java代码的库,它能在编译时自动为类生成getter/setter、equals、hashcode、toString等方法。本文介绍了Lombok的基本使用,包括@Data、@Getter、@Setter、@ToString、@EqualsAndHashCode等多个注解的应用,帮助开发者提高开发效率,减少代码冗余。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Lombok 的介绍

Lombok 能以简单的注解形式来简化 Java 代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的 getter/setter 方法,也许还要去写构造器、equals、toString 等方法,而且还需要去维护,当属性多时会出现大量的 getter/setter 方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。

Lombok 能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString 方法。在源码中没有 getter/setter 方法,但是在编译生成的字节码文件中有 getter/setter 方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁。

二、Lombok 的引入

Lombok 的使用和引用 jar 包一样,可以在官网(https://projectlombok.org/download)下载 jar 包,也可以使用 Maven 添加依赖:

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

三、Lombok的使用

1、@Data

@Data 注解在类上时,会为该类的所有属性自动生成 setter/getter、equals、anEcqual、hashCode、toString 方法,如为 final 属性,则不会为该属性生成 setter 方法。

@Data集合了 @Getter / @Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor 的所有特性。

import lombok.Data;

@Data
public class User {
    private int userId;
    private String userName;
}

2、@Getter、@Setter

@Getter 和 @Setter 注解在属性上时,可以为相应的属性自动生成 Getter / Setter方法。
@Getter(AccessLevel.PROTECTED)  和 @Setter(AccessLevel.PROTECTED) 生成的方法是 protected。

import lombok.Getter;
import lombok.Setter;

public class User {
    @Getter
    @Setter
    private int userId;
    @Getter
    @Setter
    private String userName;
}

3、@ToString

类使用 @ToString 注解,Lombok 会生成一个 toString() 方法,默认情况下,会输出类名、所有属性(按照属性定义顺序),用逗号来分割。

@ToString(exclude = "column") :排除column 属性

@ToString(exclude = {"column","column2"}) :排除column,column2 属性

@ToString(of="column") :指定包含column 属性

@ToString(of={"column","column2"}) :指定包含column,column2 属性

import lombok.ToString;

@ToString(exclude="userId")
public class User {
    private int userId;
    private String userName;
    private String userAge;
}

4、@EqualsAndHashCode

默认情况下,会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成 equals 和 hasCode 方法,也能通过 exclude 注解来排除一些属性。

@EqualsAndHashCode:重写 equals 和 hashCode 方法

@EqualsAndHashCode(exculde="column"):排除column 属性

@EqualsAndHashCode(of="column"):指定包含column 属性

import lombok.EqualsAndHashCode;

@EqualsAndHashCode(exclude="userId")
public class User {
    private int userId;
    private String userName;
    private String userAge;
}

5、@NonNull

该注解用在属性或构造器上,Lombok 会生成一个非空的声明,可用于校验参数,能帮助避免空指针。

import lombok.NonNull;

public class NonNullExample extends Something {
  private String name;
  
  public NonNullExample(@NonNull Person person) {
    super("Hello");
    this.name = person.getName();
  }
}

6、@Cleanup

该注解能帮助我们自动调用 close() 方法,很大的简化了代码。

import lombok.Cleanup;
import java.io.*;

public class CleanupExample {
  public static void main(String[] args) throws IOException {
    @Cleanup InputStream in = new FileInputStream(args[0]);
    @Cleanup OutputStream out = new FileOutputStream(args[1]);
    byte[] b = new byte[10000];
    while (true) {
      int r = in.read(b);
      if (r == -1) break;
      out.write(b, 0, r);
    }
  }
}

6、@NoArgsConstructor

自动生成无参构造器。

import lombok.Data;

@NoArgsConstructor
public class User {
    private int userId;
    private String userName;
}

@AllArgsConstructor

自动生成全参构造器,如果变量使用了 @NonNull, 会进行是否为空的校验。

import lombok.Data;

@AllArgsConstructor
public class User {
    private int userId;
    private String userName;
}

@RequiredArgsConstructor

自动生成部分参数构造器。

RequiredArgsConstructor: 会生成一个包含常量,和标识了NotNull的变量 的构造方法。生成的构造方法是private,如何想要对外提供使用可以使用staticName选项生成一个static方法。

import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.NonNull;

@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ConstructorExample<T> {
  private int x, y;
  @NonNull private T description;
  
  @NoArgsConstructor
  public static class NoArgsExample {
    @NonNull private String field;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值