Lombok 注解总结

news2026/4/2 16:48:03

一、前言

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

二、常用注解

2.1、@Data

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

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

import lombok.Data;

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

2.2、@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();

2.3、@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 会自动与这些日志框架集成,使得生成的日志记录变量能够正确地执行日志输出。

2.4、@Value

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

import lombok.Value;

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

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

2.5、@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 字段不会包含在构造方法中。

2.6、@NoArgsConstructor

生成无参构造函数。

import lombok.NoArgsConstructor;

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

2.7、@AllArgsConstructor

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

import lombok.AllArgsConstructor;

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

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

2.8、@EqualsAndHashCode

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

import lombok.EqualsAndHashCode;

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

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

2.9、@ToString

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

import lombok.ToString;

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

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

2.10、@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()方法。

三、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1623593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Next.js 14 App Router引入 farmer-motion 初始化异常解决,顺带学点知识

前言 farmer-motion 是一个非常好用的动画库,当然用来做组件切换和路由切换过渡更不在话下。 记录一下,Next.js 14 App Router 下引入初始化异常的解决姿势,顺带扯一下 next.js 的知识点; 问题 过渡组件代码 我们拿 farmer-m…

SAP DMS修改文档操作简介

修改DMS文档的事物代码是—CV02N,同样的删除、审批都是用的CV02N对文档进行操作 1、文档的审批,根据我们后台对文档版本的配置通过CV02N对这个文档状态的一个变更 当审批后系统就会显示绿灯,如下图 2、文档的标记删除 我们在CV02N的界面中直接点击删除标记即可。 点击后…

Error opening file a bytes-like object is required,not ‘NoneType‘

错误显示,打开的是一个无效路径的文件 查看json文件内容,索引的路径与json文件保存的路径不同 方法:使用python脚本统一修改json文件路径 import json import os import argparse import cv2 from tqdm import tqdm import numpy as np impo…

算法设计优化——有序向量二分查找算法与Fibonacci查找算法

文章目录 0.概述1.语义定义2. 二分查找(版本A)2.1 原理2.2 实现2.3 复杂度2.4 查找长度 3.Fibonacci查找3.1 改进思路3.2 黄金分割3.3 实现3.4 复杂度分析3.5 平均查找长度 4. 二分查找(版本B)4.1 改进思路4.2 实现4.3 性能4.4 进…

基于CANoe从零创建以太网诊断工程(2)—— TCP/IP Stack 配置的三种选项

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…

手撕netty源码(二)- 初始化ServerBootstrap

文章目录 前言一、ServerBootstrap 的创建和初始化1.1 创建1.2 初始化group1.3 初始化channel1.3 初始化option和attr1.4 初始化handler 和 childHandler 总结 前言 processOn文档跳转 接上一篇:手撕netty源码(一)- NioEventLoopGroup 本篇讲…

uni-app app和h5的通信

uni-app一套代码同时打包安卓、iOS、h5,有一些需要app与h5的交互通信,目前做到了这块的业务,记录如下: 1.去declould官网,找到uni_webview.js下载链接,将uni_webview.js文件下载到本地,修改uni_webview.js内部配置,将uni修改为webUni,修改好的文件已放到…

SpringBoot中Bean的创建过程及扩展操作点 @by_TWJ

目录 1. 类含义2. Bean创建过程 - 流程图3. 例子3.1. 可变属性注入到实体中3.2. 模拟Bean创建的例子 1. 类含义 BeanDefinition - 类定义,为Bean创建提供一些定义类的信息。实现类如下: RootBeanDefinition - 类定义信息,包含有父子关系的Be…

智慧健康旅居养老产业,做智慧旅居养老服务的公司

随着社会的进步和科技的飞速发展,传统的养老模式已经无法满足 现代老年人的多元化 需求。智慧健康旅居养老产业应运而生,成为了一种新型的养老模式,旨在为老年人提供更加舒适、便捷、安全的养老生活。随着社会的进步和人口老龄化趋势的加剧&a…

五一劳动节活动策划案怎么写?

分享一个五一劳动节活动策划万能模板,直接照着写就好。 一、活动主题: 五一户外露营Party 二、活动时间: 五一节当天,上午点至下午点 三、活动地点: 城市郊外的公园或大型绿地 四、参与人员: 公司员…

自动化测试超详细总结

简介 软件测试是软件开发过程中一个必不可少的环节。传统的软件测试方式通常是手动测试,即由专业的测试人员通过手动操作软件应用程序来验证其功能和性能。然而,这种方式存在许多缺点,例如时间耗费、测试结果不稳定、测试覆盖率不够高等。 为…

Pandas 2.2 中文官方教程和指南(二十·二)

通过组进行迭代 有了 GroupBy 对象,通过分组数据进行迭代非常自然,类似于itertools.groupby()的操作: In [74]: grouped df.groupby(A)In [75]: for name, group in grouped:....: print(name)....: print(group)....: barA B…

AI智能写作工具,一键智能改写文章简单又高效

随着人们生活节奏的加快和工作压力的增大,如何在繁忙的日程中高效地写作成为了许多人的难题。但是随着人工智能技术的不断发展和应用,AI智能写作工具的出现,成为了许多人解决写作难题的利器。今天小编就来跟大家分享下AI智能写作工具&#xf…

go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控

有关包的安装 我们要实现go语言对第三方包的操作需要我们下载第三方包go.etcd.io,下载命令: go get go.etcd.io/etcd/client/v3 ectd的put与get操作 相关函数说明与示例 我们想实现对etcd进行简单的操作的步骤还是比较简单的,在我上一篇文…

Gateway基础知识

文章目录 Spring Cloud GateWay 用法核心概念请求流程两种配置方式设置日志(建议设置)路由的各种断言断言The After Route Predicate FactoryThe Before Route Predicate FactoryThe Between Route Predicate FactoryThe Cookie Route Predicate Factory…

海外盲盒APP开发:探索海外盲盒市场的商机

随着娱乐消费的流行,盲盒在我国可以说是非常火热,消费群体和市场规模逐年增加。在盲盒热潮下,不少潮玩企业也纷纷加入到了盲盒赛道中,市场竞争非常激烈! 此外,我国盲盒出海也成为了一个大趋势。盲盒不仅在…

uni-app canvas 签名

调用方法 import Signature from "/components/signature.vue" const base64Img ref() //监听getSignImg uni.$on(getSignImg, ({ base64, path }) > {base64Img.value base64//console.log(签名base64, path >, base64, path) //拿到的图片数据// 之后取消…

Java程序员必须掌握的数据结构:HashMap

HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能类,我们来看看~ 🌱以【面试官面试】形式覆盖Java程序员所需掌握…

使用Kimi快速完成高质量学术论文全流程攻略!

点击下方▼▼▼▼链接直达AIPaperPass ! AIPaperPass - AI论文写作指导平台 目录 01.论文选题(重要指数:★★★★★) 02.摘要(重要指数:★★★★) 03.关键词(重要指数:★★★★) 04.引言(重要指数:★★★★) 05.正文(重要指数:★★★★★) 06.结论(重要指数…

能源监控可视化大屏的价值,不要说没啥用了,容易暴露格局

能源监控可视化大屏具有以下几个方面的价值: 实时监控: 能源监控可视化大屏可以实时展示能源系统的运行状态,包括电力、水、气等能源的消耗、供应情况,以及设备运行状态等。通过实时监控,可以及时发现异常情况和故障…