聊聊@Accessors和@Builder

news2025/2/21 7:38:54

目录

  • @Accessors和@Builder
    • @Accessors(chain=true)
    • @Builder
    • @Accessors和@Builder的区别
    • @Accessors和@Builder使用的坑
  • 详细看看@Accessors注解
    • @Accessors的源码
    • @Accessors属性说明
      • fluent属性
      • chain属性
      • makeFinal属性
      • prefix属性

@Accessors和@Builder

@Accessors(chain=true)

就是new一个对象后可以链式调用set给属性赋值

@Data
@Accessors(chain = true)
public class User {
    private String name;

    private Integer age;

    private Double weight;

    public static void main(String[] args) {
        User user = new User().setName("张三").setAge(18).setWeight(60.00);
        System.out.println(user);
    }
}

从上面的代码我们看到new User()后面可以链式调用set方法赋值

这是因为@Accessors(chain=true)将lombok生成的setter方法返回值变为了this,也就是返回了对象本身,代替了原本的void。

@Builder

@Builer注解是基于建造者模式的链式操作。

@Data
@Builder
public class User {
    private String name;

    private Integer age;

    private Double weight;

    public static void main(String[] args) {
        User user = User.builder().name("张三").age(18).weight(60.00).build();
        System.out.println(user);
    }
}

我们能看到是先使用bulder方法后再链式操作,然后调用build方法返回。

原因是内部生成了构建起UserBuilder,调用builder()方法就是是创建UserBuilder对象,然后给UserBuilder对象赋值,最后通过UserBuilder对象的build()来生成User对象。

可以看编译后的class文件

@Accessors和@Builder的区别

其实我们看它们编译后的class文件就可以直到原因。@Accessors是将生成的setter()方法返回this,而@Builder是再对象内部创建一个构建器,通过这个构建器来最终创建对象。

@Builder底层新建了一个对象,为了实现链式调用再创建一个对象感觉优点大材小用了。
@Accessors再实现了链式调用的基础上,减少了多余对象的创建。

@Accessors和@Builder使用的坑

  • 在有的开源反射工具包对对象进行浅拷贝时,获取set方法原信息时会判断返回值是否为void,这样使用@Accessors注解就会报错。
  • @Builder注解会给类默认生成全参构造,这样就没有了默认的无参构造,在Spring这类容器中默认调用无参构造就报错了,所以要加上@NoArgsConstructor@AllArgsConstructor注解

详细看看@Accessors注解

@Accessors的源码

在这里插入图片描述
可以看到它有四个属性,chian=true就是可以链式调用,其他的下面我们来分别说明下。

@Accessors属性说明

fluent属性

fluent=true时,setter和getter方法就没有set和get了,直接调用属性名即可

在这里插入图片描述

chain属性

chain=true时,就可以链式调用setter方法给属性赋值了

在这里插入图片描述

makeFinal属性

makeFinal=true时,生成的setter和getter方法都是final修饰的方法

在这里插入图片描述
final修饰的方法表示不能在子类中重写这些方法。

prefix属性

该属性添加一个数据,添加属性的前缀,表示忽略属性对应的前缀来生成setter和getter方法

在这里插入图片描述
如上图一样,属性赋值的时候就可以忽略前缀。

prefix属性的坑
1、如果属性的前缀和prefix写的前缀不匹配,那setter和getter方法就不会生成了。
2、属性的前缀后的第一个字母必须是大写,否则也不会生成setter和getter方法。
3、上面说的不会生成setter和getter方法是连不去前缀的都不会生成,相当于@Data注解失效了。

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

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

相关文章

2024秋招简历注意事项

互联网是一年比一年难,刚刚帮学弟修改了一下简历,学弟很强有项目有论文有比赛,但是我修改的时候感觉有点啰嗦,抓不住重点,所以在编写简历时,我觉得有几个要点一定要注意: 1. 简明扼要&#xff1…

C++之string类的使用

C之string类的使用 1.为什么要学string类2.标准库中的string类3.string类的接口的使用3.1默认成员函数3.2容量操作3.3访问操作3.4遍历操作3.5修改操作3.6字符串操作3.7非成员函数 1.为什么要学string类 我们所学的字符串是以’\0’结尾的一些字符的集合,为了操作方…

html | 基于iframe的简易富文本编辑器

效果图 支持: 选中后 ctrlI 斜体 代码 思路就是在iframe种嵌套html和css。 <pre> - 支持: 选中后 ctrlI 斜体 - todo: 鼠标实现单击斜体 </pre> <iframe name"richedit" style"height:30%; width:100%;"></iframe><script…

层叠上下文、层叠顺序

什么是层叠上下文 层叠上下文&#xff08;Stacking Context&#xff09;是指在 HTML 和 CSS 中&#xff0c;用于控制和管理元素层叠顺序以及呈现的一种机制。在一个网页中&#xff0c;许多元素&#xff08;例如文本、图像、背景等&#xff09;可能会重叠在一起&#xff0c;这时…

Hvv之Nacos漏洞分析与整改

目录 什么是nacos 漏洞复现过程 解压、修改配置文件、启动、 复现任意创建账户漏洞 问题分析 修改建议 什么是nacos Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 NACOS界面提示“内部系统…

冠达管理:市盈率除以市净率是什么意思?

市盈率&#xff08;Price-to-Earnings Ratio&#xff0c;简称P/E&#xff09;和市净率&#xff08;Price-to-Book Ratio&#xff0c;简称P/B&#xff09;是股票商场中常用的两个评价目标。市盈率衡量的是一家公司的市值与其盈余才能的联系&#xff0c;而市净率则是衡量其市值与…

Ladp数据库安装和配置自定义schema ,Centos7环境

最近安装ldap看了不少教程&#xff0c;整理下用到的有用的资料&#xff0c;并把自己的搭建过程分享。 参考 ldap介绍&#xff1a;openLDAP入门与安装 官方文档&#xff1a;https://www.openldap.org/doc/admin22/schema.html 安装配置&#xff1a;Centos7 搭建openldap完整详…

C++之模板进阶

模板进阶 非类型模板参数模板的特化概念函数模板特化类模板特化全特化偏特化 模板分离编译什么是分离编译模板的分离编译解决方法 模板总结 非类型模板参数 模板参数分两种&#xff1a;类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class…

LeetCode--HOT100题(35)

目录 题目描述&#xff1a;23. 合并 K 个升序链表&#xff08;困难&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;23. 合并 K 个升序链表&#xff08;困难&#xff09; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合…

STM32单片机蓝牙-APP全自动洗衣机水位检测洗涤脱水排水

实践制作DIY- GC0164--蓝牙-APP全自动洗衣机水位检测 基于STM32单片机设计---蓝牙-APP全自动洗衣机水位检测 二、功能介绍&#xff1a; 硬件组成&#xff1a;STM32F103C单片机最小系统LCD1602显示器 1个5V直流电机&#xff08;低速洗衣高速脱水&#xff09;1个加水电磁阀1个排水…

Windows下打包工具包为一个exe

1. 目的 很多时候&#xff0c;一个工具包有除了一个exe还有不少配置文件及dll库。如果只想给客户发布一个exe&#xff0c;要怎么办呢&#xff1f;使用静态编译&#xff0c;不使用dll&#xff0c;将资源编译到exe中&#xff0c;使用时再释放出来。这种方法比较麻烦&#xff0c;…

ZK-C3595、ZK-C35100、ZK-C40100、ZK-C40110超越离合器

ZK-A3072、ZK-A3080、ZK-A4090、ZK-A3595、ZK-A35100ZK-A40100、ZK-A40110、ZK-A3072、ZK-C3080、ZK-C4090、ZK-C3595、ZK-C35100、ZK-C40100、ZK-C40110单向离合器(超越离合器) MG300M1300MG400、M1400MG500、M1500MG600、M1600MG700、M1700MG750、M1750MG800、M1800MG900、M1…

NLP的tokenization

GPT3.5的tokenization流程如上图所示&#xff0c;以下是chatGPT对BPE算法的解释&#xff1a; BPE&#xff08;Byte Pair Encoding&#xff09;编码算法是一种基于统计的无监督分词方法&#xff0c;用于将文本分解为子词单元。它的原理如下&#xff1a; 1. 初始化&#xff1a;将…

No accessible constructors were found for the type‘XXXXXX‘

abp框架新建了一个模版项目&#xff0c;启动报错。 //报错实例 Autofac.Core.Activators.Reflection.NoConstructorsFoundException:“No accessible constructors were found for the type weigu.Admin.Order.OrderHuizongAppService.”报错意思是没有为’ weight.admin.orde…

骑行运动耳机哪款好?五年骑行爱好者给你分享分享

作为一名骑行达人&#xff0c;我尝试过多种骑行耳机&#xff0c;有入耳式、耳罩式、骨传导等等&#xff0c;但总有一款让我特别满意。直到我遇到了这几款耳机&#xff0c;它不仅音质出色&#xff0c;而且非常适合骑行&#xff0c;让我爱不释手。下面&#xff0c;我将分享一下这…

渗透测试之逻辑漏洞

文章目录 一、支付漏洞1.修改附属值2.多重替换支付3.重复支付4.最小额支付5.最大值支付6.越权支付7.无限制试用8.多线程并发9.支付漏洞思路 二、密码找回漏洞1.本地验证绕过2.利用session重新绑定客户3.去掉验证参数绕过4.总结 三、短信验证码绕过1.短信验证码生命期限内可暴力…

unity 之 Vector 数据类型

文章目录 Vector 1Vector 2Vector 3Vector 4 Vector 1 在Unity中&#xff0c;Vector1 并不是一个常见的向量类型。 如果您需要表示标量&#xff08;单个值&#xff09;或者只需要一维的数据&#xff0c;通常会直接使用浮点数&#xff08;float&#xff09;或整数&#xff08;in…

安卓手机跑 vins slam (2)

既然选择把vins的代码移植到新工程&#xff0c;那么就需要先确定自己电脑的Android Studio的C开发环节是OK的&#xff0c;可以通过创建C的示例工程&#xff0c;能正常跑通做验证。 选择Native C 需要选择用C哪个版本&#xff0c; 这里通过百度搜索&#xff0c;slam 编译需要C 1…

边缘智能初创公司AiM Future成功完成A轮投资

AiM Future是一家总部在韩国专注于边缘AI加速技术的公司&#xff0c;最近完成了A轮融资。在融资环境不是那么友好的情况下&#xff0c;还能完成融资还是很厉害的&#xff0c;可以来了解一下这个公司最新融资情况。以下为官方新闻稿。 新闻亮点&#xff1a; AiM Future 获得数百…

Richtek(立锜)车载PD快充产品常见问题解答—兼具 USB PD 和 UFCS 快充电源完整解决方案

1 我的Switch游戏机能不能用最新的PD协议&#xff1f; 可以的&#xff0c;PD最新协议都兼容旧协议 2 PD协议向下兼容吗&#xff1f; 是的&#xff0c;PD3.1也是向下兼容的 3 UFCS协议目前用什么仪器测试&#xff1f; 谢谢。 目前RICHTEK有协议测试工具&#xff0c;中国UFCS协…