【无标题】idea的lombok插件支持@SuperBuilder注解啦

news2024/11/26 1:24:21

在我的博客阅读本文

1. 前言

今早进公司打开idea,弹出更新提示,简单看了下,原来是idea的lombok插件更新了,惊喜的发现update log上写着Add support for @SuperBuilder

为什么说是惊喜呢?因为之前也有用到这个的场景,去官网认认真真看完了@SuperBuilder的用法以及描述,刚准备大展拳脚,结果发现idea上怎么写都识别不出来,后来去插件的github上看了一下,在issue中发现很多请求插件更新支持@SuperBuilder注解,而插件作者大概的回复就是已经在开发计划中了,不要催,催也不能提高进度。不得已,在自己的项目中只能冗余一些代码,而不能基于lombok更加优雅简洁的去写。

虽然插件已经更新支持,但是一直没有实际使用导致我都忘了很多用法了,这篇文章基于官网文档,用来记录与复习相关用法。

2. 关于@SuperBuilder

2.1. 首先了解@Builder

看到这篇文章的你肯定已经用过这个注解,这里简单陈述一下基本用法,如果你已经了解,可以略过此部分。

2.1.1. 引入依赖(Maven结构)
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>
123456
2.1.2. 创建一个类
/**
 * Ming
 *
 * @author sq.ma
 * @date 2019/10/9 上午9:37
 */
@Builder
public class Ming {
    private Integer age;
    private String name;
}
1234567891011

这里使用@Builder注解,就可以在创建新实例的时候这样写:

Ming mingA = Ming.builder().build();
Ming mingB = Ming.builder()
  	.age(11)
  	.build();
Ming mingD = Ming.builder()
  	.age(11)
  	.name("小明")
  	.build();
12345678

可以看到,我们只要写一个@Builder注解,有如下好处:

  • 一个注解代替若干参数情况下的构造函数,缩减了构造类的代码量
  • 通过Builder构造的方式,即.属性名(值)这样的方式,比直接使用构造函数的方式更加具备可读性,比频繁使用set方法的方式更加简洁。
2.2. 了解@SuperBuilder
2.2.1. @SuperBuilder解决了什么样的问题

在上文(2.1)中,我们了解了@Builder的使用,那么我们将例子中的Ming这个类的成员属性放到父类当中:

/**
 * @author sq.ma
 * @date 2019/10/9 上午10:01
 */
public class Person {
    private Integer age;
    private String name;
}

@Builder
public class Ming extends Person{
}
123456789101112

这个时候,我们之前的调用的.builder都会报错,这是因为@Builder并不支持父类成员属性的构造,@SuperBuilder注解的出现,就是用来解决这个问题。

/**
 * @author sq.ma
 * @date 2019/10/9 上午10:01
 */
@SuperBuilder
public class Person {
    private Integer age;
    private String name;
}

@SuperBuilder
public class Ming extends Person{
}
12345678910111213

这样子类就可以正常获取到父类的成员属性进行builder构造了。

2.2.2. @SuperBuilder(toBuilder = true)用法

toBuilder属性默认关闭,如果开启,则所有的父类应该也要开启,效果如下:

Ming mingD = Ming.builder()
      .age(11)
      .name("小明")
      .build();
Ming mingF = mingD.toBuilder().name("猪").build();
System.err.println(mingD.toString());
System.err.println(mingF.toString());
1234567

通过设置true,所有的类实例会拥有toBuilder方法,这是一个类似深拷贝的一个方法,不会改变原有实例的属性,生成一个新的实例。在toBuilder中有赋值的属性则会改变为赋值属性,没有赋值的以调用的实例中的值为准。

2.2.3. @SuperBuilder(buildMethodName = "execute", builderMethodName = "helloWorld", toBuilder = true) 用法

这个用法其实没什么意思,就是自定义方法名,不展开赘述。

2.2.4. @Builder.ObtainVia(XXX) 用法

这个是Filed或parameter的注解,我们看下源码

@Target({FIELD, PARAMETER})
@Retention(SOURCE)
public @interface ObtainVia {
		/**
		 * @return Tells lombok to obtain a value with the expression {@code this.value}.
		 */
		String field() default "";
		
		/**
		 * @return Tells lombok to obtain a value with the expression {@code this.method()}.
		 */
		String method() default "";
		
		/**
		 * @return Tells lombok to obtain a value with the expression {@code 			   SelfType.method(this)}; requires {@code method} to be set.
		 */
		boolean isStatic() default false;
}
123456789101112131415161718

其中,

  • field是告诉lombok赋值时从哪个属性取值
  • method是告诉lombok赋值时调用什么方法
  • isStatic是跟在method后的,默认为false,代表相应的method是否是静态

需要注意的是这几个方法只有在ToBuilder = true的时候有效,最好不要混合使用(有先后顺序问题)

2.2.5. 注意补充构造方法

2019-10-10 更新

使用@Builder@SuperBuilder注解时,不会默认创建空参构造函数,如果你有额外使用空参构造函数或全参构造函数的需求,需要在子类和父类都加上以下注解:

@AllArgsConstructor //全参构造函数
@NoArgsConstructor //空参构造函数
12

3. 参考文献

@SuperBuilder - lombok官网

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

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

相关文章

DIY 云成本优化的5大挑战

外星人。 黑暗骑士。 帝国反击战。 在 Incredibuild&#xff0c;如果有一样东西我们喜欢&#xff0c;那就是我们的话题永远有续集。我们将针对云端优化推出一个更深入的续集&#xff0c; 但这一次我们谈论的是云成本优化&#xff0c;采用 DIY 的方式。&#xff08;如果你还不…

Kubernetes Gateway API V1.0:您应该切换吗?

自Kubernetes Gateway API 发布 v1.0以来已经过去两个多月了&#xff0c;这标志着其一些关键 API 已经进入普遍可用状态。 去年&#xff0c;当网关 API升级为测试版时&#xff0c;我曾写过有关该 API的文章&#xff0c;但一年后&#xff0c;问题仍然存在。您是否应该从 Ingres…

SV-DJS-I13 深圳锐科达电梯 IP 五方对讲规格书

SV-DJS-I13 深圳锐科达电梯 IP 五方对讲规格书 DJS-I13 是专门对行业用户需求研发的一款 SIP 电梯五方对讲。它不仅有稳定性 好、电信级音质的优点&#xff0c;且完美兼容当下所有基于 SIP 的主流 IPPBX/软交换/IMS 平台, 如 Asterisk, Broadsoft, 3CX, Elastix 等。它集…

【MySQL用户管理】

目录&#xff1a; 前言用户管理创建用户删除用户修改用户密码修改用户密码安全检测设置 用户权限添加权限回收权限 总结 前言 剑指offer&#xff1a;一年又13天 用户管理 mysql> show databases; -------------------- | Database | -------------------- | inf…

[Python进阶] Python处理txt文件:open

7.1 Python处理txt文件&#xff1a;open 在Python中&#xff0c;通过open函数可以打开一个文件&#xff0c;创建一个file对象&#xff0c;然后对该对象进行读写。 函数语法&#xff1a; open(name[, mode[, buffering]…]) 参数说明&#xff1a; name&#xff1a;文件名 mode&…

你真的知道2024程序员搞钱新姿势吗?

2023年已经过去&#xff0c;2024的序曲已经奏响&#xff01;回顾2023&#xff0c;我们经历了降薪裁员的大趋势&#xff0c;身为程序员也有点惶惶不可终日&#xff0c;害怕会失去工作&#xff0c;害怕面对家人无奈的模样&#xff0c;害怕跟不上时代的步伐&#xff0c;沦为被大环…

Minitab 各版本安装指南

Minitab下载链接 https://pan.baidu.com/s/1PLqocknkoRGGI9lbV3e45A?pwd0531 1.鼠标右击【Minitab 21(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Minitab 21(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【setu…

众和策略安全可靠:如何区分大盘股和小盘股?大盘股指数有哪些?

股票根据流转盘能够划分为大盘股、中盘股、小盘股这三大类&#xff0c;那么&#xff0c;怎么区别大盘股和小盘股&#xff1f;大盘股指数有哪些&#xff1f;下面众和策略为我们准备了相关内容&#xff0c;以供参考。 怎么区别大盘股和小盘股&#xff1f; 根据个股的市值来区别…

使用异构图学习破解推荐系统 - 第 1 部分

Lokesh Sharma – Medium 一、说明 所以&#xff0c;这是独家新闻&#xff1a;异质图拥有一个充满潜力的世界&#xff0c;而常规图却无法做到这一点。传统的同构图很难处理不同关系和边类型的复杂性。现在是大炮的时候了——先进的架构可以解决具有多种边缘和关系类型的数据集的…

Go后端开发 -- Go Modules

Go后端开发 – Go Modules 文章目录 Go后端开发 -- Go Modules一、什么是Go Modules?二、GOPATH的工作模式1.GOPATH模式2.GOPATH模式的弊端 三、Go Modules模式创建项目1.go mod命令2.go mod环境变量3.使用Go Modules初始化项目4.修改模块的版本依赖关系 四、Go Modules下impo…

快速实现前后端表单交互(minui)

&#xff08;1&#xff09;使用minui快速生成表单 &#xff08;2&#xff09;修改样式&#xff0c;将生成的html文件发送给后端 &#xff08;3&#xff09;前后端交互&#xff08;后端如何处理不太清楚&#xff09; 表单初始化&#xff1a;新增修改&#xff08;包括查看&…

如何远程修改plc程序?

​在工业自动化领域中&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;是不可或缺的一部分。然而&#xff0c;传统方式下修改PLC程序需要亲临现场&#xff0c;这不仅耗时&#xff0c;还增加了成本。那么有没有一种更加高效、便捷的方法呢&#xff1f;答案是肯定的&…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息&#xff0c;用JSON文件保存&#xff0c;比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…

6591A便携式光伏组串测试仪

01 6591A便携式光伏组串测试仪 产品综述&#xff1a; 6591A主要用于1500V光伏组串的测试&#xff0c;能够方便、快速的测试1500V光伏组串在自然光照下的工作特性&#xff0c;可为太阳能电站设计、验收、维护提供测试保障&#xff0c;是电站建设单位、质检部门、生产厂家、科研…

Navicat 技术干货 | 聚合查询的介绍

基础 SQL 查询可以检索、插入、更新和删除记录&#xff0c;而聚合查询可通过提供求和、平均值或最大/最小值等的大型结果集&#xff0c;将数据库交互提升到一个新的水平。本文中&#xff0c;我们将探索聚合 SQL 查询的基础知识&#xff0c;并研究如何有效的利用他们来分析和汇总…

边坡安全监测预警系统——高效率

安装边坡安全监测预警系统的原因是多方面的&#xff0c;涉及到社会效益、经济效益和环境效益。随着国家基础设施建设的快速发展&#xff0c;边坡安全监测预警系统的需求越来越迫切。 边坡安全监测预警系统对于保障人民生命财产安全具有重要意义。在山区、丘陵地带&#xff0c;边…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结&#xff1a;当子类重写了父类方法A&#xff0c;父类方法直接调用被重写的父类方法后&#xff0c;调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

安科瑞电化学储能电能管理系统解决方案——安科瑞 顾烊宇

1 概述 在我国新型电力系统中&#xff0c;新能源装机容量逐年提高&#xff0c;但是新能源比如光伏发电、风力发电是不稳定的能源&#xff0c;所以要维持电网稳定&#xff0c;促进新能源发电的消纳&#xff0c;储能将成为至关重要的一环&#xff0c;是分布式光伏、风电等新能源消…

Java中的异常如何处理?

在Java编程中&#xff0c;异常是一种在程序执行期间发生的意外情况。学会处理异常是编写健壮、可靠程序的关键之一。 为什么需要异常处理&#xff1f; 异常处理允许程序在发生错误时进行优雅而有序的处理&#xff0c;而不是导致程序崩溃。这有助于提高程序的可维护性和用户体…

Alibaba Cloud Linux镜像操作系统超详细测评!兼容CentOS

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版&#xff0c;针对阿里云服务器ECS做了大量深度优化&#xff0c;Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS&#xff0c;Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…