当前位置:   article > 正文

Lombok注解超详细解析_java lombok注解

java lombok注解

概要

Lombok 是一个 Java 库,用于通过注解方式自动化生成 Java 类的常用方法(如 getter、setter、toString 等),从而简化开发流程并减少重复性代码。以下是 Lombok 库中常用的注解及其作用。

一、@Getter和@Setter

为类的字段自动生成getter和setter方法。

import lombok.Getter;
import lombok.Setter;

public class Person {
    @Getter @Setter
    private String name;
    @Getter @Setter
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

使用@Getter和@Setter注解后,Lombok会自动生成getName()和setName()方法以及getAge()和setAge()方法。

二、@ToString

自动生成toString()方法,方便对象的打印输出。

import lombok.ToString;

@ToString
public class Person {
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用@ToString注解后,Lombok会自动生成toString()方法,以便打印对象的字段值。

三、@EqualsAndHashCode

自动生成equals()和hashCode()方法,用于对象的比较和哈希计算。

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Person {
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用@EqualsAndHashCode注解后,Lombok会自动生成equals()和hashCode()方法。

四、@NoArgsConstructor

生成无参构造函数。

import lombok.NoArgsConstructor;

@NoArgsConstructor
public class Person {
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用@NoArgsConstructor注解后,Lombok会生成一个无参构造函数。

五、@AllArgsConstructor

自动生成包含所有非静态字段的构造函数(全参构造方法)。

import lombok.AllArgsConstructor;

@AllArgsConstructor
public class Person {
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用@AllArgsConstructor注解后,Lombok会为所有非静态字段生成构造函数。

六、@RequiredArgsConstructor

自动生成必需参数的构造方法,通常用于 final 属性。

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class User {
    private final String name;
    private int age;
    private final String email;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在上述示例中,三个字段:name、age 和 email。通过在类上使用 @RequiredArgsConstructor 注解,Lombok 会自动生成一个构造方法,该构造方法只包含 name 和 email 这两个被标记为 final 的字段作为参数,age 字段不会包含在构造方法中。

七、@Data

结合了@Getter、@Setter、@EqualsAndHashCode和@ToString的功能。

import lombok.Data;

@Data
public class Person {
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用@Data注解后,Lombok会自动为类生成getter、setter、equals、hashCode和toString等方法。

八、@Value

生成不可变类,类似于 @Data,但不会生成 setter 方法。不可变类指的是一旦创建对象,就不能再修改它的字段值。使用 @Value 注解可以避免意外的修改对象的状态,从而增加代码的健壮性和可维护性。

import lombok.Value;

@Value
public class User {
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

请注意,由于 @Value 注解生成的类是不可变的,所以它不会生成 setter 方法。如果需要在对象创建后对字段进行修改,就不适合使用 @Value 注解。但对于不需要修改的数据对象,使用 @Value 可以保证对象状态的一致性,从而减少错误和代码维护难度。

九、@Builder

自动生成构建对象的 builder 模式。Builder 模式可以简化对象的创建,特别是当类的构造参数较多时。

import lombok.Builder;

@Builder
public class User {
    private String name;
    private int age;
    private String email;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在上述示例中,我们使用了 @Builder 注解来标记 User 类,Lombok 会为 User 类生成一个内部静态类 UserBuilder,用于构建 User 对象。

使用 @Builder 生成的构建器可以按照以下方式来使用:

User user = User.builder()
                .name("John")
                .age(25)
                .email("john@example.com")
                .build();
  • 1
  • 2
  • 3
  • 4
  • 5

在构建器中,可以使用链式调用来设置对象的属性,然后通过调用 build() 方法来构建最终的对象。构建器会自动为您生成合适的构造参数和方法,使得代码更具可读性和易用性。

需要注意的是,@Builder 注解可以配置一些属性,例如:

  • access:控制生成的构造器的可见性,默认为 PUBLIC。
  • builderMethodName:指定构建器方法的名称,默认为 builder。
  • buildMethodName:指定构建对象的方法名称,默认为 build。
  • toBuilder:生成一个支持属性复制的 toBuilder() 方法。

总之,使用 @Builder 注解可以减少繁琐的构造方法,提高代码的可读性和编写效率,特别是在类的字段较多时。

十、@Slf4j

自动生成日志记录变量,通常与具体的日志库(如 Logback、Log4j2)配合使用。

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class UserService {
    public void logMessage() {
        log.info("This is a log message.");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在上述示例中,我们使用了 @Slf4j 注解来标记 UserService 类。Lombok 会自动生成一个名为 log 的日志记录变量,你可以在类中使用这个变量来进行日志记录。在这里,我们使用了 log.info(“This is a log message.”) 来记录一条信息日志。

需要注意的是,使用 @Slf4j 注解前,你需要确保项目中已经配置了相应的日志框架,如 Logback、Log4j2 等。Lombok 会自动与这些日志框架集成,使得生成的日志记录变量能够正确地执行日志输出。

@Slf4j 注解可以显著减少手动创建日志记录对象的代码,提高代码的可读性和维护性。

总结

这些注解可以根据需求单独使用,也可以组合在一起使用,以简化 Java 类的开发过程,减少冗余代码,并提高代码的可读性和维护性。请注意,使用 Lombok 需要在项目中添加 Lombok 的依赖,以便编译器能够正确处理这些注解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/650688
推荐阅读
相关标签
  

闽ICP备14008679号