Lombok注解超详细解析

Lombok是一个Java库,通过注解如@Getter,@Setter,@ToString等自动化生成常见方法,包括getter,setter,toString等,提升开发效率并减少代码冗余。注解如@Data,@Value等组合使用,实现快速构建不可变类和使用Builder模式。

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

概要

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;
}

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

二、@ToString

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

import lombok.ToString;

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

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

三、@EqualsAndHashCode

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

import lombok.EqualsAndHashCode;

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

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

四、@NoArgsConstructor

生成无参构造函数。

import lombok.NoArgsConstructor;

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

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

五、@AllArgsConstructor

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

import lombok.AllArgsConstructor;

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

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

六、@RequiredArgsConstructor

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

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class User {
    private final String name;
    private int age;
    private final String email;
}

在上述示例中,三个字段: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;
}

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

八、@Value

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

import lombok.Value;

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

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

九、@Builder

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

import lombok.Builder;

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

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

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

User user = User.builder()
                .name("John")
                .age(25)
                .email("john@example.com")
                .build();

在构建器中,可以使用链式调用来设置对象的属性,然后通过调用 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.");
    }
}

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

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

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

总结

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

Lombok是一个Java库,它提供了一些注解,用于简化Java类的编写。其中一些常用的Lombok注解有: 1. @Getter和@Setter:这两个注解可以自动生成属性的getter和setter方法,从而简化了属性的访问和修改。通过使用@Accessors注解,可以修改默认的setter和getter方法的形式,使其更加流畅。 2. @Builder:这个注解可以帮助我们实现构建器模式,通过链式调用的方式构建对象。在使用时,我们可以通过链式调用的方式设置对象的各个属性,并最终通过.build()方法构建对象。 在你提供的例子中,使用了@Builder注解来构建Demo对象,并通过链式调用的方式设置了name和nums属性的值。最后打印出的demo对象的结果是Demo(name=lucky, nums=[1, 2, 3])。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot 中常用注解及各种注解作用](https://download.csdn.net/download/weixin_38736011/12762978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Lombok工具 : 常用注解介绍 (全)](https://blog.csdn.net/m0_37989980/article/details/126324284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值