首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Lombok 中 @Builder 妙用!

不知道大家有没有用过 Lombok?里面的 @Builder 注解使用创建者模式又叫建造者模式。简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建细节,但却可以精细地控制对象构造过程。...创建一个名为 ThisClassBuilder 内部静态类,并具有和实体类形同属性(称为构建器)。 在构建器中:对于目标类中所有的属性和未初始化final字段,都会在构建器中创建对应属性。...在构建器中:创建一个无参default构造函数。 在构建器中:对于实体类中每个参数,都会对应创建类似于setter方法,只不过方法名与该参数名相同。...在实体类中:会创建一个builder()方法,它目的是用来创建构建器。...在使用 @Singular 注释注释一个集合字段(使用 @Builder 注释类),lombok 会将该构建器节点视为一个集合,并生成两个 adder 方法而不是 setter 方法

1.7K10

lombok@Builder注解原理背后干了啥?

它返回与目标返回相同类型 有意义toString()实现 在包含target类中:一个builder()方法,该方法创建builder新实例 如果该元素已存在,则每个列出生成元素都将被静默跳过...这包括构建器本身:如果该类已经存在,则lombok会简单地开始在此现有类中注入字段方法,除非要注入字段/方法当然已经存在。...toBuilder();它创建一个新构建器,该构建器以该实例所有值开始。...您可以将@Builder.ObtainVia注释放在参数(对于构造函数或方法情况)或字段(对于@Builder类型情况)上,以指示从该实例获取该字段/参数替代方法。...同时在子类和全参数构造器使用 @Builder 注解,最终 build() 函数只返回了空参构造器创建一个子类对象,因此属性“采用 builder 方式设置 字段最终都丢失了。

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

lombok使用基础教程

更有甚者,由于字段太多,想要使用builder来创建。手动创建builder和字段和原来类夹杂在一起,看起来真的难受。lombok@Builder即可解决这个问题。...Getter声明创建getter方法; Setter声明创建setter方法; @Setter(AccessLevel.PROTECTED)可以添加参数,指定权限为私有; Attention!...@NonNull将标注这个字段不应为null,初始化时候会检查是否为空,否则抛出NullPointException。在上面的无参构造函数中被忽略了。...其他默认,Javaclass初始化默认为null.false,0. lombok提供了另一种初始化做法,静态初始化。即私有构造器,使用静态方法创建对象。这种做法看起来简单,但通常用不多。...但是,手动复制字段,手动创建方法很让人不喜。@Builder解决了刚需。

1.6K140

lombok注解笔记

buildMethodName:构建器类中创建构造器实例方法名称 builderClassName:构造器类名 toBuilder:生成toBuilder方法 例子 public Example.ExampleBuilder...,方法体不能带有参数,默认为close @Data 作用 生成所有字段getter、toString()、hashCode()、equals()、所有非final字段setter、构造器,相当于设置了...hashCode(),默认:false doNotUseGetters:是否不调用字段getter,默认如果有getter会调用。...返回值为this fluent:为true时,默认设置chain为true,setter方法名修改为字段名 @Delegate 作用 代理模式,把字段方法代理给类,默认代理所有方法 参数 types...extends String> var1); } } @ExtensionMethod 作用 拓展方法,向现有类型“添加”方法,而无需创建派生类型。有点像kotlin扩展函数。

1.3K20

Lombok使用指南

Lombok in IntelliJ IDEA Lombok in Eclipse 三、Lombok详解 注解说明 val:用在局部变量前面,相当于将变量声明为final @NonNull:给方法参数增加这个注解会自动在方法内对该参数进行是否为空校验...// 标识在执行字段计算前,是否调用父类equals和hashCode方法 boolean callSuper() default false; boolean doNotUseGetters...{ // 打印输出时是否包含字段名称 boolean includeFieldNames() default true; // 列出打印输出时,需要排除字段列表...,将会自动生成一个 withFieldName(newValue) 方法,该方法会基于 newValue 调用相应构造函数,创建一个当前类对应实例。...IDE工具问题解决: 现在有一个A类,其中有一些字段,没有创建它们setter和getter方法,使用了lombok@Data注解,另外有一个B类,它调用了A类实例相应字段setter和getter

88940

检查两个数据库里表名、字段是否一致一种方法

他可以看到一个数据库里表名、字段名、字段类型、和字段大小信息。 建立两个这样视图,一个读取客户数据库,一个读取新数据库。这样我们就有了两个数据库表和字段信息列表了。...col INNER JOIN       .sysobjects obj ON col.id = obj.id ORDER BY obj.name 2、执行查询语句 我们可以使用 not in 方式来检查表名是否一致...当然是在表名一致前提下才能进行字段对比。 3、下面就是对照字段类型,然后字段大小。 需要SQL语句我还没有写出来。估计不是太难吧。...这种方法已经在我一个项目里试验了一下,基本是正确。 4、不过还是发现了几个问题。 1、缺少表的话可以使用企业管理器来自动生成键表语句,但是添加字段就有一点麻烦了。...不过对于视图和存储过程 只能得知名称和字段、参数是否一致,如果参数没有变化,只是修改了一下内容的话就检查不出来了。 3、如果是修改表名或者是修改字段名、删除字段名就没有检查了。

1.7K80

盘点 Lombok 几个骚操作

有的方法看看就好,知道可以这么用,但是否应用到实际开发中,那就仁者见仁,智者见智了。 一万个读者就会有一万个哈姆雷特,希望这篇文章能够给您带来一些思考。 耐心看完,你一定会有所收获。...@Singular注解可以用在集合类型字段上,它会生成两个方法,一个是添加单个元素方法,一个是添加整个集合方法。...这两个方法可以和 @Builder 生成其他方法一起链式调用,给你所有字段赋值。...,你可以灵活地添加集合类型字段,而不需要自己创建和初始化集合对象。...@With 允许你创建一个新对象,该对象是当前对象副本,但某些字段值已被更改。

10410

代码重构实战-将值对象改为引用对象(Change Value to Reference)

过多数据复制有可能会造成内存占用问题,但就跟所有性能问题一样,这种情况并不常见。 若共享数据需要更新,将其复制多份做法就会遇到巨大困难。此时我必须找到所有副本,更新所有对象。...漏掉一个副本没更新,就会导致数据不一致。这时,考虑将多份数据副本变成单一引用,这样对顾客数据修改就会立即反映在该顾客所有订单中。...我在*Customer****中定义工厂方法: package com.javaedge.refactor.ttt; import lombok.AllArgsConstructor; import...我比较喜欢通过另一个对象(例如Order中一个字段)来访问它。但本例并没有这样一个明显字段用于访问Customer对象。...简化例子,我把这个注册表保存在Customer类static字段中,让Customer类作为访问点: 然后我得决定: 在接到请求时,创建Customer对象 还是预先将它们创建好 这里我选择后者。

78630

基于Springboot+MybatisPlus外卖项目瑞吉外卖Day3

当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量线程提供独立变量副本,所以每一个线程都可以独立地改变自己副本,而不会影响其它线程所对应副本。...ThreadLocal常用方法: ​ public void set(T value) 设置当前线程线程局部变量值 ​ public T get() 返回当前线程所对应线程局部变量值 三、解决方法...​ 在LoginCheckFilterdoFilter方法中获取当前登录用户id,并调用ThreadLocalset方法来设置当前线程线程局部变量值(用户id),然后在MyMetaObjectHandler...updateFill方法中调用ThreadLocalget方法来获得当前线程所对应线程局部变量值(用户id)。...,并没有检查删除分类是否关联了菜品或者套餐,我们需要进行功能完善。

40820

瑞吉外卖实战项目全攻略——第三天

新添分类 分类信息分页查询 删除分类 修改分类 公共字段自动填充 我们功能开发一般分为三个阶段 需求分析 前面我们已经完成了后台系统员工系统开发,在新增或修改员工时需要填写创建时间创建人修改时间修改人等繁杂信息...而且这些属性基本在后续菜品,套餐中都有所体现,我们把这些字段称为公共字段,所以我们希望采用一种统一方法来设置: MyBatisPlus为我们提供了公共字段自动填充功能 我们先来简单介绍一下流程:...当使用ThreadLocal维护变量时,每个使用该变量线程具有独立变量副本。 每一个线程都可以独立地改变自己副本,而不会影响其它线程所对应副本。...,而是存储在Dish和Setmeal数据表中: 所以我们需要创建这两者基本信息,并在Category业务层中修改默认代码,创建一个符合我们要求方法 代码实现 首先我们将创建Dish和Setmeal...工具类使用 在公共字段自动填充部分,我们为了使用ThreadLocal从而创建了相对工具类 我们工具类就是为了便捷操作而使用,我们为了使用相关参数但同时多次不用创建实体而直接使用工具类 例如我们

53420
领券