提升开发效率,Lombok的链式编程和构建模式
目录
链式编程
定义
代码示例
编辑 @Accessors(chain=true) 开启链式编程
编辑
@Accessors(chain = true,fluent = true) 去除set和get
构建模式
定义
代码示例
编辑 踩坑
@Singular
定义
代码示例
踩坑默认值情况
编辑
@With
定义
代码示例
链式编程
定义
链式编程的原理就是返回一个this对象,就是返回本身,达到链式效果。
代码示例
我们平常在创建对象的时候,需要对对象的属性进行设置,传统的设置形式如下
@Accessors(chain=true) 开启链式编程
lombok提供了@Accessors注解可以很方便地开启链式编程
在structure可以很方便地查看下该类生成的方法
可以看到该类的三个设置属性方法最后返回的都是该类本身
从而实现了链式编程的效果
@Accessors(chain = true,fluent = true) 去除set和get
@Accessors还可以根据fluent属性来去除set和get的方法名冗余
可以看到原先的getAge(),setAge()等方法名前的set和get都被省略掉了
构建模式
定义
Builder使用创建者模式又叫建造者模式简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程.
代码示例
可以查看编译后的student类源码
踩坑
注意前面只使用了@Builder @Data这两个注解来定义该类,然而@Data注解默认是包含了@AllArgsConstructor(全属性有参构造) @NoArgsConstructor(无参构造)这两个注解的,但是一旦加了@Builder注解后,其无参构造会失效,也就是说原先的new Student()创建实体方法会报错:
可以看到有参构造还是可以用的,但是无参构造已经失效,所以这里还需要额外单独添加@NoArgsConstructor注解来配合使用
但是如果加了@NoArgsConstructor注解那么有参构造又出幺蛾子也失效了,所以这里@AllArgsConstructor也需要额外单独添加
这样的话无论是构建还是原先的new 实例都可以了
@Singular
定义
@Singular是Lombok中的注解之一,它用于在生成的Builder模式中处理集合类型的属性。
当我们在类中使用@Singular注解时,它会为属性生成一个特殊的setter方法,这个方法接收单个元素作为参数,而不是整个集合。在使用Builder模式创建对象时,我们可以逐个添加元素,而不需要手动创建集合或使用addAll方法。
代码示例
现在在Student中添加一个集合属性List<String>
然后使用构建模式来为它设置属性值
可以看到设置集合类型的数据时需要直接传入一个List<String> 类型的数据
可以通过@Singular来方便地设置集合类型的数据
它会生成一个默认的添加单个该集合属性元素的方法
注意方法名是默认的,如果不想使用默认的还可以对其value属性设置方法的名字
当然它与原先的添加集合的属性方法并不冲突,还可以两者混用
注意
@Singular只能应用于lombok已知的集合类型。目前,支持的类型有:
java.util:
Iterable, Collection, 和List (一般情况下,由压缩的不可修改的ArrayList支持).
Set, SortedSet, and NavigableSet (一般情况下,生成可变大小不可修改的HashSet或者TreeSet).
Map, SortedMap, and NavigableMap (一般情况下,生成可变大小不可修改的HashMap或者TreeMap).
踩坑默认值情况
如果该对象使用lombok的构建模式,其默认值这里会失效
可以看到hobby属性默认值为null
这里需要添加@Builder.Default 注解来设置属性默认值
此时hobby属性就是默认值了
@With
定义
@With是Lombok中的注解之一,它可以用于生成一个新的实例,该实例是原实例的一份副本,但具有某些属性被修改的特点。
当我们在类中使用@With注解时,它会为被注解的属性生成一个特殊的setter方法,该方法接收新的属性值,并返回一个新的实例,而不会修改原实例。这使得我们可以在不直接修改原实例的情况下,创建一个新实例并修改其中的属性值。
代码示例
比如这里给name属性添加@with注解
测试
可以看到添加了@with注解的name属性一旦被更改就会产生新的引用实例,注意这里并不是set方法,而是withName方法了
相关文章:

提升开发效率,Lombok的链式编程和构建模式
目录 链式编程 定义 代码示例 编辑 Accessors(chaintrue) 开启链式编程 编辑 Accessors(chain true,fluent true) 去除set和get 构建模式 定义 代码示例 编辑 踩坑 Singular 定义 代码示例 踩坑默认值情况 编辑 With 定义 代码示例 链式编程 定义 链…...

DuDuTalk:AI语音工牌如何帮助教培公司高效管理课程顾问团队
近年来,随着人工智能的快速发展,越来越多的公司开始利用AI技术来提高工作效率和管理效果。在教育培训行业中,课程顾问团队的管理对于公司的运营和发展至关重要。 而在实际管理中,受教培人员素质参差不齐,能力差异大&a…...

C语言——静态库和动态库的创建和使用
使用库函数是源码的一种保护 库函数其实不是新鲜的东西,我们一直都在用,比如C库。我们执行pringf() 这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a 动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可执行程序中, 运行的…...

数学学习——最优化问题引入、凸集、凸函数、凸优化、梯度、Jacobi矩阵、Hessian矩阵
文章目录 最优化问题引入凸集凸函数凸优化梯度Jacobi矩阵Hessian矩阵 最优化问题引入 例如:有一根绳子,长度一定的情况下,需要如何围成一个面积最大的图像?这就是一个最优化的问题。就是我们高中数学中最常见的最值问题。 最优化…...

HCIP期中实验
考试需求 1 、该拓扑为公司网络,其中包括公司总部、公司分部以及公司骨干网,不包含运营商公网部分。 2 、设备名称均使用拓扑上名称改名,并且区分大小写。 3 、整张拓扑均使用私网地址进行配置。 4 、整张网络中,运行 OSPF 协议…...

【Git系列】IDEA集成Git
🐳IDEA集成Git 🧊1. idea配置git🧊2. idea添加暂存区和提交🪟创建文件🪟将整个项目添加到暂存区🪟提交到本地仓库🪟查看控制台,显示提交的信息🪟修改文件,再次…...

短视频矩阵源码开发搭建分享--多账号授权管理
目录 文章目录 前言 一、矩阵号系统是什么? 二、使用步骤 1.创建推广项目 2.多账号授权 3.企业号智能客服系统 总结 前言 短视频多账号矩阵系统,通过多账号一键授权管理的方式,为运营人员打造功能强大及全面的“矩阵式“管理平台。…...

数据中台系列2:rabbitMQ 安装使用之 window 篇
RabbitMQ 是一个开源的消息队列系统,是高级消息队列协议(AMQP)的标准实现,用 erlang 语言开发。 因此安装 RabbitMQ 之前要先安装好 erlang。 1、安装 erlang 到 这里 下载本机能运行的最新版 erlang 安装包。如果本机没有装过 …...

Windows驱动开发
开发Windows驱动程序时,debug比较困难,并且程序容易导致系统崩溃,这时可以使用Virtual Box进行程序调试,用WinDbg在主机上进行调试。 需要使用的工具: Virtual Box:用于安装虚拟机系统,用于运…...

汽车分析,随时间变化的燃油效率
简述 今天我们来分析一个汽车数据。 数据集由以下列组成: 名称:每辆汽车的唯一标识符。MPG:燃油效率,以英里/加仑为单位。气缸数:发动机中的气缸数。排量:发动机排量,表示其大小或容量。马力&…...

大数据面试题之Elasticsearch:每日三题(六)
大数据面试题之Elasticsearch:每日三题 1. 为什么要使用Elasticsearch?2.Elasticsearch的master选举流程?3.Elasticsearch集群脑裂问题? 1. 为什么要使用Elasticsearch? 系统中的数据,随着业务的发展,时间…...

【管理设计篇】聊聊分布式配置中心
为什么需要配置中心 对于一个软件系统来说,除了数据、代码,还有就是软件配置,比如操作系统、数据库配置、服务配置 端口 ip 、邮箱配置、中间件软件配置、启动参数配置等。如果说是一个小型项目的话,可以使用Spring Boot yml文件…...
远程控制平台简介
写在前面 之所以想自己动手实现一个远程控制平台,很大一部分原因是因为我那糟糕的记性,虽然经常加班到很晚,拖着疲惫的步伐回到家,才想起忘记打卡了,如果我能在家控制在办公室的手机打一下卡就好了… 有人说,市场上有TeamViewer,向日葵,AnyDesk,ToDesk,等等这些老大…...

韦东山Linux驱动入门实验班(5)LED驱动---驱动分层和分离,平台总线模型
前言 (1)前面已经已经详细介绍了LED驱动如何进行编写的代码。如果韦东山Linux驱动入门实验班(4)LED驱动已经看懂了,驱动入门实验班后面的那些模块实验,其实和单片机操作差不太多了。我就不再浪费时间进行讲…...

【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境
知识点:简单了解K210芯片 2018年9月6日,嘉楠科技推出自主设计研发的全球首款基于RISC-V的量产商用边缘智能计算芯片勘智K210。该芯片依托于完全自主研发的AI神经网络加速器KPU,具备自主IP、视听兼具与可编程能力三大特点,能够充分适配多个业务场景的需求。作为嘉楠科…...
C#——Thread与Task的差异比较及使用环境
C#——Thread与Task的差异比较及使用环境 前言一、差异1. 创建和管理:2. 异步编程:3. 返回值:4. 异常处理:5. 线程复用: 总结 前言 前面两篇文章,分别通过各自的实例讲了关于Task以及Thread的相关的使用特…...
刷题 31-35
三十一、 747. 至少是其他数字两倍的最大数 给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。 示例 1&a…...

【mysql】—— 数据类型详解
序言: 本期我将大家认识关于 mysql 数据库中的基本数据类型的学习。通过本篇文章,我相信大家对mysql 数据类型的理解都会更加深刻。 目录 (一)数据类型分类 (二)数值类型 1、tinyint类型 2、bit类型 …...
kafka常用命令
查看主题 ./kafka-topics.sh --list --bootstrap-server 10.1.1.2:9092 创建主题 ./kafka-topics.sh --bootstrap-server 10.1.1.2:9092 --create --topic test_topic --partitions 1 查看消费者列表--list ./kafka-consumer-groups.sh --bootstrap-server 10.1.1.2:9092 -…...

数字图像处理(番外)图像增强
图像增强 图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。 图像对比度 图像对比度计算方式如下: C ∑ δ δ ( i , j …...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...