idea中java类属性(字段)链式赋值
很多人看到标题可能会想到 lombok 的 @Builder,lombok 在国内用的挺多的,开源的组件中 mybatis-plus 中用到了这个,使用这个有一个问题就是通过对应 get 和 set 方法找不到对应的赋值方法,因为 lombok 使用了 apt 在编译期生成了相关的字节码。这样对于喜欢看源码的人来说很不好,起码我在看国外开源的代码时没有看到过使用 lombok 的。
在工作期间就想到了一点,idea 中有没有那种相关生成 Builder 代码的插件?
经过多次尝试,发现了一个名为 innerbuilder 的插件可以做到和 lombok 生成的代码一致。
InnerBuilder - IntelliJ IDEs Plugin | Marketplace
如下代码为例
public class SceneProductRelaInfo {/*** 场景信息*/private SysnSceneProductInfo sysnSceneProductInfo;/*** 场景关联商品信息*/private List<WarePortal> productInfoList;public SysnSceneProductInfo getSysnSceneProductInfo() {return sysnSceneProductInfo;}public void setSysnSceneProductInfo(SysnSceneProductInfo sysnSceneProductInfo) {this.sysnSceneProductInfo = sysnSceneProductInfo;}public List<WarePortal> getProductInfoList() {return productInfoList;}public void setProductInfoList(List<WarePortal> productInfoList) {this.productInfoList = productInfoList;}}
在 idea->Settings->Plugins 中搜索 innerbuilder 进行安装

代码右键 Generate

按照如下处理即可
public class SceneProductRelaInfo {/*** 场景信息*/private SysnSceneProductInfo sysnSceneProductInfo;/*** 场景关联商品信息*/private List<WarePortal> productInfoList;private SceneProductRelaInfo(Builder builder) {setSysnSceneProductInfo(builder.sysnSceneProductInfo);setProductInfoList(builder.productInfoList);}public SysnSceneProductInfo getSysnSceneProductInfo() {return sysnSceneProductInfo;}public void setSysnSceneProductInfo(SysnSceneProductInfo sysnSceneProductInfo) {this.sysnSceneProductInfo = sysnSceneProductInfo;}public List<WarePortal> getProductInfoList() {return productInfoList;}public void setProductInfoList(List<WarePortal> productInfoList) {this.productInfoList = productInfoList;}public static final class Builder {private SysnSceneProductInfo sysnSceneProductInfo;private List<WarePortal> productInfoList;private Builder() {}public static Builder builder() {return new Builder();}public Builder sysnSceneProductInfo(SysnSceneProductInfo val) {sysnSceneProductInfo = val;return this;}public Builder productInfoList(List<WarePortal> val) {productInfoList = val;return this;}public SceneProductRelaInfo build() {return new SceneProductRelaInfo(this);}}
}
最终生成出来的代码和 lombok 的一致。
SceneProductRelaInfo build = SceneProductRelaInfo.builder().productInfoList(null).sysnSceneProductInfo(null).build();
上面的代码逻辑在使用 @Builder 注解和生成的代码中切换,没有异常。
lombok 原理
https://blog.csdn.net/ly279481968/article/details/108000799
https://www.jianshu.com/p/302c56f9574d
https://zhuanlan.zhihu.com/p/485004057
https://zhuanlan.zhihu.com/p/574760548
相关文章:
idea中java类属性(字段)链式赋值
很多人看到标题可能会想到 lombok 的 Builder,lombok 在国内用的挺多的,开源的组件中 mybatis-plus 中用到了这个,使用这个有一个问题就是通过对应 get 和 set 方法找不到对应的赋值方法,因为 lombok 使用了 apt 在编译期生成了相…...
vue通知(滚动)
1. li宽度不顾定 <template><div id"app"><div id"box" mouseover"clearLeft" mouseleave"setLeft"><ul :style"{ transform: translateX( left px) }" ref"cmdlist"><li v-for&qu…...
linux安装新版本git2、配置github-ssh。(centos、aws)
一、安装Git 1、yum默认版本git #1.安装git sudo yum install git -y #2.确认Git已经安装成功 git --version如果要安装较新版本,可以安装一个repo ,但是我这第一次尝试失败了,执行完提示找不到git2u,ius repo也连不上。而且每次…...
毅速丨3D打印结合拓扑优化 让轻量化制造更容易
制造轻量化对于提高能源利用效率、提高产品性能和减少环境影响,推动制造业的绿色化、高质量发展具有重要的促进作用。 轻量化设计对许多领域都有着重要影响,尤其是那些需要降低能源消耗、提高运输效率或减少对环境影响的领域。如航空航天,轻量…...
6252: 【C1】【分支】比较大小(一)
目录 题目描述 输入 输出 样例输入 样例输出 提示 来源 C代码: 题目描述 输入两个整数,输出较大数(两数相等输出任意一个) 输入 两行 第一行一个整数:m 第二行一个整数:n ( -30000 < m , n…...
网工实验手册:RSTP如何配置?
1. 实验目的 熟悉RSTP的应用场景掌握RSTP的配置方法 想要华为数通配套实验拓扑和配置笔记的朋友们点赞关注,评论区留下邮箱发给你! 2. 实验拓扑 实验拓扑如图所示: 图:RSTP的配置 3. 实验步骤 (1) …...
uniapp开发h5引入第三方js(sdk)
manifest.json 应用配置 | uni-app官网 根据文档上描述需要自定义模板的场景为: 方法一: 起初以为是在原有的index.html基础上再新建一个html文件,在项目根目录建立一个template.h5.html(仿照hello-uni-app项目)&…...
Could not find artifact com.sleepycat;je:jar:7.3.7 in aliyunmaven
在编译inlong源码时报的错误,去本地库里发现只有lastupdate的文件,就又去maven库里看了一下Maven Repository: com.sleepycat je (mvnrepository.com),发现没有这个版本,将版本进行修改错误解决...
rust学习—— 控制流if 表达式
控制流 根据条件是否为真来决定是否执行某些代码,或根据条件是否为真来重复运行一段代码,是大部分编程语言的基本组成部分。Rust 代码中最常见的用来控制执行流的结构是 if 表达式和循环。 if 表达式 if 表达式允许根据条件执行不同的代码分支。你提供…...
POSIX信号量
目录 信号量的原理 信号量函数 使用信号量实现线程互斥功能 基于环形队列的生产消费模型 生产者和消费者必须遵守的两个规则 信号量的原理 通过之前的学习,我们知道有的资源可能会被多个执行流同时申请访问,我们将这种资源叫做临界资源,…...
stable diffusion和midjourney哪个好
midjourney和stable diffusion哪个好?midjourney和stable diffusion的区别?那么今天就从这2款软件入手,来探索一下他们的功能的各项区别吧,让你选择更适合你的一款ai软件。 截至目前,我们目睹了生成式人工智能工具的在…...
固件签名的安全解决方案 安当加密
在汽车行业中,加密机常用于对固件进行签名,以增加固件的安全性和完整性。以下是几个可能的使用场景: 固件验证:当汽车制造商或供应商需要对固件进行验证时,可以使用加密机来验证固件的来源和完整性。通过使用公钥和私…...
istio介绍(一)
1. 概念 1.1 虚拟服务 虚拟服务提供流量路由功能,它基于 Istio 和平台提供的基本的连通性和服务发现能力,让您配置如何在服务网格内将请求路由到服务 示例: apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:nam…...
基于鱼鹰优化的BP神经网络(分类应用) - 附代码
基于鱼鹰优化的BP神经网络(分类应用) - 附代码 文章目录 基于鱼鹰优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.鱼鹰优化BP神经网络3.1 BP神经网络参数设置3.2 鱼鹰算法应用 4.测试结果:5.M…...
【LeetCode】145. 二叉树的后序遍历 [ 左子树 右子树 根结点]
题目链接 文章目录 Python3方法一: 递归 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法二: 迭代 ⟮ O ( n ) ⟯ \lgroup O(n) \rgroup ⟮O(n)⟯方法三: Morris ⟮ O ( n ) 、 O ( 1 ) ⟯ \lgroup O(n)、O(1) \rgroup ⟮O(n)、O(1)⟯写…...
Unity之ShaderGraph如何实现触电电流效果
前言 之前使用ASE做过一个电流效果的shader,今天我们通过ShaderGraph来实现一个电流效果。 效果如下: 关键节点 Simple Noise:根据输入UV生成简单噪声或Value噪声。生成的噪声的大小由输入Scale控制。 Power:返回输入A的结果…...
【微信小程序调试工具试用】
【微信小程序调试工具试用】 试用大佬开发的dll拿到某物小程序sign签名 (过于简单 大佬勿喷)本次工具分享到此结束 什么是爬虫逆向? 试用大佬开发的dll拿到某物小程序sign签名 (过于简单 大佬勿喷) 1 如图 下面小程序…...
机械生产ERP管理系统
机械生产ERP管理系统 功能介绍: 生产管理: 1.灵活自定义生产车间、成本费用类型、成本项目; 2.方便直观的物料清单(BOM),并可以逆向展开; 3.科学实用的物料需求计划(MRP)&#x…...
Vue 模板字符串碰到script无法识别,报错Parsing error: Unterminated template.
需求: 将js代码完整的显示在界面上,包括标签 代码如下: 报错信息如下: 我们在上图中可以看到模板字符串加入了script标签后会报错 原因:运行JS的时候由上至下,先识别模板字符串里面的script标签…...
AWS SAP-C02教程5--基础中间件
在AWS中除了计算、存储、网络之外,还有一些组件非常重要,包括基础组件、消息队列组件、日志组件、编排组件等,接下来就通过分成几个不同类别(这个分类按照AWS的大概分类进行分类,并无统一标准,只是具备一定相同功能归类在一起方便记忆) 目录 1 消息中间件1.1 SQS1.1.1 …...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
