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

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

在Lombok v0.12.0中作为实验功能引入 自v1.16.0起获得了 @Singular 支持并被升级到了主要lombok软件包 @Builder、@Singular自lombok v1.16.8...在builder中:对目标的每个参数使用类似 setter 的方法:与该参数具有相同的类型和相同的名称。...它返回构建器本身,以便可以将setter调用链接起来 在builder中:build()调用该方法的方法,并在每个字段中传递。...要获得此行为,必须使用注释字段/参数@Singular。该功能具有其自己的文档。 现在,“方法”模式已经很清楚了,@Builder在构造函数上添加注释的功能类似。...同时在子类和全参数的构造器使用 @Builder 注解,最终的 build() 函数只返回了空参的构造器创建的一个子类对象,因此属性“采用 builder 方式设置的 字段最终都丢失了。

2.6K20

Lombok 中 @Builder 妙用!

在构建器中:创建一个无参的default构造函数。 在构建器中:对于实体类中的每个参数,都会对应创建类似于setter的方法,只不过方法名与该参数名相同。...在构建器中:一个build()方法,调用此方法,就会根据设置的值进行创建实体对象。 在构建器中:同时也会生成一个toString()方法。...在实体类中:会创建一个builder()方法,它的目的是用来创建构建器。...在使用 @Singular 注释注释一个集合字段(使用 @Builder 注释类),lombok 会将该构建器节点视为一个集合,并生成两个 adder 方法而不是 setter 方法。...生成的集合将被压缩到最小的可行格式,同时保持高效。 @Singular 只能应用于 lombok 已知的集合类型。

4.2K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    子类使用lombok 的 @Builder 注解的正确姿势

    一、背景 在实际开发中,有时候需要对子类使用lombok的 @Builder注解来使用builder模式构造该子类对象。...Parent{ } 此时虽然在子类上添加了@Builder注解,但是由于子类没有属性,如下图所示,无法使用builder模式。...final String name) { this.name = name; return this; } } } 找到了原因,同时在子类和全参数的构造函数使用...我们再次回到@Builder 源码的注释上: If a member is annotated, it must be either a constructor or a method....从编译后的代码我们可以清晰地看出 lombok 通过@Builder 实现的 builder模式的核心逻辑。 即构造内部类,在内部类赋值属性,build时调用含有所有属性的构造方法创建对象。

    2.2K30

    加倍提升开发效率,继续深挖Lombok的使用

    你可以使用@ lombok.experimental.Tolerate标记任何构造函数或方法,以便将他们容纳在 lombok 中。...在 Builder 中,每个目标参数都有一个私有的非静态 、非 final 属性 在 Builder 中,一个包级私有无参数的构造函数。...在 Builder 中,有一个 build()方法,它调用方法并传入每个字段。 它返回与目标相同的类型。...在 Builder 中,一个合理的 toString() 实现 在包含目标的类中,一个 builder() 方法,它创建构造器的新实例 @Builder 有很多冗余的代码,来看下面这个例子 @Builder...Singular 常常与 Builder 一起使用,通过使用 @Singular注解注释其中一个参数(如果使用@Builder注释方法或构造函数)或字段(如果使用@Builder注释类),lombok

    76520

    超级全面的 Lombok 注解介绍,学一波!

    你还可以在类上添加@Getter和/或@Setter注释。在这种情况下,就好像你使用该注释来注释该类中的所有非静态字段一样。...通过将callSuper设置为true,可以将toString的超类实现的输出包含到输出中。请注意,java.lang.Object中toString() 的默认实现几乎毫无意义。...所有未初始化的final字段都会获取一个参数,以及所有未声明其位置的未标记为@NonNull的字段。 @AllArgsConstructor为类中的每个字段生成一个带有1个参数的构造函数。...例如 未标注@Singular的属性,一般setter时,会直接覆盖原来的引用,标注了@Singular的属性,集合属性支持添加操作,会在属性原来的基础上增加。...With Lombok: import lombok.Builder; import lombok.Singular; import java.util.Set; @Builder public class

    4.8K32

    走进Java接口测试之效率插件lombok

    引言 我们在开发测试代码过程中,通常都会定义大量的 JavaBean ,然后通过IDE 去生成其属性的构造器、getter、setter、equals、hashcode、toString 方法,当要增加属性或者对某个属性进行改变时...在使用 javac 的过程中,它产生作用的具体流程如下: javac对源代码进行分析,生成一棵抽象语法树(AST) javac编译过程中调用实现了JSR 269的Lombok 程序 此时Lombok 就对第一步骤得到的...对象,使用时用对应的注解,如:@Log4j 更多注解说明:https://projectlombok.org/features/index.html 简单使用示例 使用lombok @Data @Builder...注解,builder 是现在比较推崇的一种构建值对象的方式。...@Builder public class BuilderExample { private String name; private int age; @Singular private

    65320

    今天 1024,为了不 996,Lombok 用起来以及避坑指南

    Lombok简介、使用、工作原理、优缺点 Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注解,用来消除 Java 类中的大量样板代码。...如果注解在类上在类实例创建后不可修改,即不会生成 setter 方法,这个会导致 @Setter 不起作用 @Builder 注解在类上,生成构造器 @SneakyThrows @Synchronized...可以大大简化我们的代码 Lombok的优缺点 优点: 提高开发效率,自动生成getter/setter、toString、builder 等,尤其是类不断改变过程中,如果使用 IDEA 自动生成的代码...当团队决定不再使用 Lombok 的时候,可以使用 Lombok 插件的 Delombok 一键去除,在 Refactor > Delombok 中 再次注意- @AllArgsConstructor...在使用javac的过程中,它产生作用的具体流程如下: javac对源代码进行分析,生成了一棵抽象语法树(AST) 运行过程中调用实现了“JSR 269 API”的Lombok程序 此时Lombok就对第一步骤得到的

    77430

    推荐一款代码神器,代码量至少省一半!

    翻译过来就是说,Lombok项目是一个 Java 库,它能够自动嵌入到你的 IDE 编辑器和编译工具中。有了它,你再也不用写 getter 或者 equals 方法了,还有 val 特性等。...如上图所示,Lombok支持所有主流的 IDE 开发工具及编译构建工具。 在 IDEA 中安装 Lombok 插件,这样在使用 Lombok 的时候就不会编译报错。 ?...provided 2、使用注解简化代码 从 IDEA 中的 Lombok 插件特性可以看到支持的注解。...@RequiredArgsConstructor 用在类上,使用类中所有带有 @NonNull 注解和 final 类型的字段生成对应的构造方法。...,如果传入到 set 方法中的值为空,则抛出空指针异常,该注解也会生成一个默认的构造方法。

    61630

    使用lombok编写优雅的Bean对象

    实际上lombok很多注解,让这个java类在使用的时候,也可以更优雅。 本文就从ORM实体类、Builder模式工具类、Wither工具类以及Accessors工具类几个层面对比一下。...首先说明,不同的方式本质上没有优劣之分,不过在不同的应用场景就会变得很奇妙了。...Builder 构造器模式,在很多工具类中频繁的使用。...lombok提供了另一个注解配合使用,那就是 @Singular,如下: package com.pollyduan.builder; import java.util.List; import lombok.AccessLevel...那么,默认值在Bean上,不在Builder上,那么Builder没赋值,它的值就是null,最后把所有属性都复制给UserBean,从而null覆盖了默认值。 如何让Builder实体来有默认值呢?

    60430

    你有没有使用过这些编程骚操作(一)- Lombok(Part B)

    六、其他重要的Lombok注解 @Cleanup注解 与 @SneakyThrows注解 @Cleanup注解 @Cleanup注解可以生成对资源进行关闭的代码,无须手动通过try-catch-finally...class文件 @Accessors(prefix = "j")注解在@Data生成的getter/setter方法的基础上,将指定的前缀去除 七、Lombok中 @Slf4j 日志注解使用 @Slf4j...方法返回的,并且通过接口来输出日志,这也是比较推荐的方法 八、对象创建 @Builder注解 与 @Singular注解 @Builder注解 @Builder注解的作用将对象的创建和使用完全分割开来,...在test包下新建一个BuilderAnnotationTest测试类 @Builder @Data public class BuilderAnnotationTest { private...方法,查看创建出来的对象的普通属性的值是否会变化 普通属性的初始值创建对象的时候不会带过来;默认的值如果不手动赋值,是不会带过来的 @Singular注解 @Singular注解配合@Builder

    42320

    最全一篇Lombok使用讲解,及原理,真香啊

    通过在开发环境中实现 Lombok,开发人员可以节省构建诸如hashCode()和equals()这样的方法以及以往用来分类各种 accessor 和 mutator 的大量时间。...有兴趣的同学反编译带有 Lombok 注解的类文件也就一目了然了。其大致执行原理图如下: ?...在init方法中,先用来做参数的初始化,将AnnotationProcessor类中定义的内部类(JavacDescriptor、EcjDescriptor)先注册到ProcessorDescriptor...在 LombokProcessor 处理器中,其中的process方法会根据优先级来分别运行相应的 handler 处理类。...Lombok 中的多个自定义注解都分别有对应的 handler 处理类,如下图所示: ? 可以看出,在 Lombok 中对于其自定义注解进行实际的替换、修改和处理的正是这些handler类。

    12.8K66

    Lombok @Builder注解与继承

    Lombok 的 @Builder注解可以方便的支持 Builder 模式,但是在继承场景下,会出现 Lombok @Builder注解不会为继承的字段生成代码的问题。...自己实现 Builder 模式 使用 Lombok @Builder注解 可以很方便的使用构造模式, 我们也可以自己实现 Builder 模式,这将有助于我们理解 Builder 模式在继承场景下问题的本质...自己实现 Builder 模式主要有四个步骤: 在POJO 类中创建 builder 方法,创建并返回 Builder 对象 需要创建一个内部静态 Builder 类,并且在 Builder 类中创建和...我尝试着做了翻译: 我曾经写过有关 Lombok _@Builder _注解的文章。不久前,我们开始在项目中使用到了它。...如果是这样, Lombok 会在 builder 类中为构造方法或者静态方法的每一个参数创建 setter 方法。这意味着,你可以创建一个自定义的构造方法,其中包含该类(包括其超类)所有字段的参数。

    18.5K20
    领券