提升开发效率,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方法了 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stable diffusion

一&#xff1a;安装。 stable diffusion 安装和使用全教程 - 知乎 Stable Diffusion安装 - 知乎 环境安装&#xff1a; 1&#xff1a;python 3.10安装。 Download Python | Python.org 切记要安装3.10版本&#xff0c;因为Stable diffusion是用3.10版本编写的&#xff0c;所…

mysql综合练习语法总结

mysql综合练习 用于 小白练手的主要用于以后语法忘了回来看 题目 # 1、创建数据库test01_library # 2、创建表 books&#xff0c;表结构如下&#xff1a;# 3、向books表中插入记录 # 1&#xff09;不指定字段名称&#xff0c;插入第一条记录 # 2&#xff09;指定所有字段名…

【音频分离】demucs V3的环境搭建及训练(window)

文章目录 一、环境搭建&#xff08;1&#xff09;新建虚拟环境&#xff0c;并进入&#xff08;2&#xff09;安装pyTorch&#xff08;3&#xff09;进入代码文件夹&#xff0c;批量安装包&#xff08;4&#xff09;安装其他需要的包 二、数据集准备&#xff08;1&#xff09;下…

【Git】Git GitHub

1. Git1.1 Git基本操作1.2 Git版本回退1.3 Git分支操作 2. Git 配合GitHub2.1 生成密钥2.2 GitHub添加公钥2.3 Git连接GitHub2.4 本地仓库关联远程仓库2.5 本地代码push远程仓库2.6 本地clone远程仓库2.7 本地fetch和pull 1. Git 1.1 Git基本操作 touch test.py 工作区创建文…

Mac电脑目录

System&#xff08;系统&#xff09;Applications&#xff08;应用程序&#xff09;应用程序目录&#xff0c;默认所有的GUI应用程序都安装在这里User&#xff08;用户&#xff09;存放用户的个人资料和配置。每个用户有自己的单独目录Library&#xff08;资料库&#xff09;系…

阿里云率先荣获容器集群稳定性先进级认证

7 月 25 日&#xff0c;由中国信通院发起的“2023 稳保体系”评估结果在可信云大会现场公布&#xff0c;阿里云容器服务 ACK 成为首批通过“云服务稳定运行能力-容器集群稳定性”评估的产品&#xff0c;并荣获“先进级”认证。 云原生技术正在激活应用构建新范式&#xff0c;构…

异常和中断的区别

异常和中断的区别 中断异常中断和异常的相同点中断和异常的区别 中断 中断是由硬件设备产生的&#xff0c;而它们从物理上说就是电信号&#xff0c;之后&#xff0c;它们通过中断控制器发送给CPU&#xff0c;接着CPU判断收到的中断来自于哪个硬件设备&#xff08;这定义在内核…

使用PyGWalker可视化分析表格型数据

大家好&#xff0c;可以想象一下在Jupyter Notebook中拥有大量数据&#xff0c;想要对其进行分析和可视化。PyGWalker就像一个神奇的工具&#xff0c;能让这项工作变得超级简单。它能获取用户的数据&#xff0c;并将其转化为一种特殊的表格&#xff0c;可以与之交互&#xff0c…

5个设计师必备的绘画工具,不看错亿

在设计工作中&#xff0c;绘画工具是设计师经常会用到的设计工具&#xff0c;今天本文将与大家分享5个好用的绘画工具&#xff0c;一起来看看吧&#xff01; 1、即时灵感 即时灵感是一款非常受欢迎的绘画工具&#xff0c;它为设计师提供了自由的绘画方式&#xff0c;也提供了…

使用文心一言等智能工具指数级提升嵌入式/物联网(M5Atom/ESP32)和机器人操作系统(ROS1/ROS2)学习研究和开发效率

以M5AtomS3为例&#xff0c;博客撰写效率提升10倍以上&#xff1a; 0. Linux环境Arduino IDE中配置ATOM S3_zhangrelay的博客-CSDN博客 1. M5ATOMS3基础01按键_zhangrelay的博客-CSDN博客 2. M5ATOMS3基础02传感器MPU6886_zhangrelay的博客-CSDN博客 3. M5ATOMS3基础03给RO…

kafka部署

1.kafka安装部署 1.1 kafaka下载 https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-2.4.0.tgz Binary downloads是指预编译的软件包,可供直接下载和安装,无需手动编译。在计算机领域中,二进制下载通常指预构建的软件分发包,可以直接安装在系统上并使用 "2.…

LLM - LLama 模型读取报错 TypeError: not a string

一.引言 读取 LLama2 模型时报错 TypeError: not a string 看异常栈是 AutoTokenizer.from_pretrained 时候的异常。 二.问题解决 出现类似加载模型异常的问题&#xff0c;大致分两类&#xff1a; ◆ 模型地址异常 脚本里传的 pretrained_model Path 有问题&#xff0c;加 …

【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)

React 基础巩固(三十五)——ReduxToolKit (RTK) 一、RTK介绍 Redux Tool Kit &#xff08;RTK&#xff09;是官方推荐的编写Redux逻辑的方法&#xff0c;旨在成为编写Redux逻辑的标准方式&#xff0c;从而解决上面提到的问题。 RTK的核心API主要有如下几个&#xff1a; confi…

UIKit相关

CALayer和UIView 区别 UIView继承自UIResponder&#xff0c;主要负责事件传递、事件响应&#xff0c;属于基于UIKit框架 CALayer继承自NSObject&#xff0c;负责图像渲染&#xff0c;动画和视图的显示&#xff0c;属于QuartzCore框架 而且这两大内容都符合单一职责原则&#…

拼多多海外版Temu商业模式分析

拼多多于2022 年 9 月在美国上线跨境平台 Temu&#xff0c;发布仅2个月就成为北美下载量最高的应用程序&#xff0c;持续霸榜。 这篇文章帮你快速了解下Temu&#xff1a; 商业模式如何竞争情况如何有哪些优势和挑战后期业务如何发展 一、Temu商业模式 Temu平台拥有对商品的最…

Java项目-苍穹外卖-Day01

文章目录 博客介绍软件开发流程项目介绍产品原型技术选型 博客介绍 从头开始做黑马的苍穹外卖项目 每天记录一下新学的知识点以及对应的开发进度 然后一些在项目中遇到的问题会重点标注 本篇主要是后端的&#xff0c;前端会一笔带过 软件开发流程 流程介绍需求分析需求规格说…

深入学习Mysql引擎InnoDB、MylSAM

目录 一、什么是MySQL 二、什么是InnoDB 三、什么是MyISAM 四、MySQL不同引擎有什么区别 一、什么是MySQL MySQL是一种广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是由瑞典MySQL AB公司开发并推广&#xff0c;后来被Sun Microsystems收…

网络安全-防御需知

目录 网络安全-防御 1.网络安全常识及术语 资产 漏洞 0day 1day 后门 exploit APT 2.什么会出现网络安全问题&#xff1f; 网络环境的开放性 协议栈自身的脆弱性 操作系统自身的漏洞 人为原因 客观原因 硬件原因 缓冲区溢出攻击 缓冲区溢出攻击原理 其他攻击…

拿捏--->打印菱形

文章目录 题目描述算法思路代码示例 题目描述 在屏幕上输出以下图案&#xff1a; 算法思路 代码示例 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {int n;scanf("%d", &n);//上半部分菱形for (int i 0; i < n; i) //上半部分…

《华为认证》SR MPLS BE配置

实验需求&#xff1a;在PE1和PE3之间建立mp-bgp邻居传递CE1和CE2的私网路由&#xff0c;并且使用SR mpls BE的方式传递私网流量 实验步骤 步骤1&#xff1a;配置设备接口ip地址以及AS 100内的igp协议&#xff08;略&#xff09; 步骤2&#xff1a;AS 100内的设备开启mpls &am…
最新文章