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

Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!

juejin.cn/post/ 7103011031672176677 问题背景 Lombok @Data和@Builder分别单独分析用法 解决方法 方法一 方法二 Lombok原理 总结 ----...问题背景 Lombok使⽤ 同时使⽤@Data和@Builder ,构建无参构造器报错!...@Data和@Builder分别单独分析用法 Lombok使⽤@Data可以⽣成⽆参构造和类⾥⾯所有属性的getter/setter⽅法。...但是如果同时使⽤@Data和@Builder的话,可以看出尽管⽣成了GET/SET⽅法,但是⽆参构造⽅法没有了,这显然是不能接受的,因为很多框架都会调⽤⽆参构造去创建对象。...同时使⽤@Data和@Builder的时候,如果要⽣成⽆参构造,需要在代码⾥⾯⼿动引⼊注解@Tolerate,让Lombok在⽣成类的时候,对指定的构造函数不感知。

1.9K30

Lombok 同时使用 @Data 和 @Builder 的巨坑,千万别乱用!

来源:juejin.cn/post/7103011031672176677 问题背景 Lombok使⽤ 同时使⽤@Data和@Builder ,构建无参构造器报错!编译不通过。...如下图: 图片 Lombok @Data和@Builder分别单独分析用法 Lombok使⽤@Data可以⽣成⽆参构造和类⾥⾯所有属性的getter/setter⽅法。可以简化我们代码的开发。...(需要安装Lombok插件和引⼊Lombok依赖)。 例如下⾯的⼀个实体类,引⼊Lombok后,可以⾃动⽣成GET/SET⽅法和⽆参构造函数。...但是如果同时使⽤@Data和@Builder的话,可以看出尽管⽣成了GET/SET⽅法,但是⽆参构造⽅法没有了,这显然是不能接受的,因为很多框架都会调⽤⽆参构造去创建对象。...解决方法 方法一 Lombok同时使⽤@Data和@Builder的时候,如果要⽣成⽆参构造,需要在代码⾥⾯⼿动引⼊注解@Tolerate,让Lombok在⽣成类的时候,对指定的构造函数不感知。

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

    lombok几个基本注解的使用@Data@AllArgsConstructor@NoArgsConstructor@Builder

    lombok是一款在java开发中简洁化代码十分有用的插件工具,这篇博客对较为常用的几种注解进行记录,分享学习心得。...使用lombok注解,目的和作用就在于不用再去写经常反复去写的(如Getter,Setter,Constructor等)一些代码了。...首先,用到的几个注解: @Data 使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。...@AllArgsConstructor 使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数 @NoArgsConstructor 使用后创建一个无参构造函数 @Builder 关于Builder...: 1)首先,建立一个简单的类,并用lombok进行注解:注意这是注解前的代码,可以与后面贴出的注解生成的代码进行比较 @Data //生成getter,setter等函数 @AllArgsConstructor

    1.7K40

    Lombok 中 @Builder 妙用!

    01 基础使用 Lombok 的 @Builder 注释为你的类生成相对略微复杂的构建器 API。...虽然放在类上和放在构造函数上这两种模式是最常见的用例,但 @Builder 最容易用放在方法的用例来解释。 1.1 @Builder 内部帮我们做了什么?...创建一个名为 ThisClassBuilder 的内部静态类,并具有和实体类形同的属性(称为构建器)。 在构建器中:对于目标类中的所有的属性和未初始化的final字段,都会在构建器中创建对应属性。...但是,这会创建一个新的对象,而不是原来的对象,原来的对象属性是不可变的,除非你自己想要给这个实体类再添加上 @Data 或者 @setter 方法。...全局配置 # 是否禁止使用@Builder lombok.builder.flagUsage = [warning | error] (default: not set) # 是否使用Guaua lombok.singular.useGuava

    4.2K11

    Lombok @Builder注解踩坑记录

    Lombok是一款Java开发中常用的工具库,它提供了许多注解,可以简化代码的编写。...排查经过数据库新增字段中声明了NOT NULL,但代码在中赋了NULL值,导致插入失败;进一步排查所有给新增字段赋值的代码,发现了一处lombok注解:// 这里简化了业务类,只是为了说明情况import...lombok.Data;@Datapublic class Reason { // ...业务字段 private String id; @Builder @Getter @ToString...原因在使用@Builder注解时,Lombok会为该类生成一个Builder类,该Builder类中会包含该类的所有字段,并且每个字段都有一个对应的set方法。...Param.ParamBuilder opUserName(String opUserName) { this.opUserName = opUserName; return this; }}在Build时,Lombok

    52500

    聊聊使用lombok @Builder踩到的坑

    01 前言 什么是lombok Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。...对lombok不熟悉的朋友,可以阅读一下官方文档,再来看本文。官方文档如下 https://projectlombok.org/ 02 正文 我们先来看一个小例子 提问: main函数会输出什么?...真相就在lombok用@builder生成的class文件中,我们看下使用@builder,生成的class文件反编译后长啥样 看到我圈红起来的,大家应该就一目了然。...原来当我们用 User user = User.builder().username("张三").build(); 时,此时user对象中的positionList就会被userBuilder中的positionList...注解 @Builder.Default private List positionList = new ArrayList(); 此时用@Budiler生成class为 public

    56320

    Java中lombok @Builder注解使用详解

    简介 Lombok大家都知道,在使用POJO过程中,它给我们带来了很多便利,省下大量写get、set方法、构造器、equal、toString方法的时间。...除此之外,通过@Builder注解,lombok还可以方便的时间建造者模式。 只需要定义一个静态公共的内部类即可。...的话,可以直接使用@Builder注解来实现 改造上面的类如下: import lombok.Builder; import lombok.ToString; /** * @author wulongtao...参考博客评论: Lombok’s @Builder annotation and inheritance 如何在使用@Builder的模式中,加入字段的默认值。...自定义静态内部类作为建造者,赋予默认值,再使用@Builder注解,这个时候lombok会补全已有的建造者类,进而使用默认值 更新的lombok有@Builder.Default声明,注解在需要默认值的字段上即可

    16.9K50

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

    在Lombok v0.12.0中作为实验功能引入 自v1.16.0起获得了 @Singular 支持并被升级到了主要lombok软件包 @Builder、@Singular自lombok v1.16.8...在builder中:对目标的每个参数使用类似 setter 的方法:与该参数具有相同的类型和相同的名称。...这包括构建器本身:如果该类已经存在,则lombok会简单地开始在此现有类中注入字段和方法,除非要注入的字段/方法当然已经存在。...请注意,如果将@Value和@Builder都放在类上,则@Builder要生成“ wins”的程序包私有构造函数,而禁止@Value要生成的构造函数。...同时在子类和全参数的构造器使用 @Builder 注解,最终的 build() 函数只返回了空参的构造器创建的一个子类对象,因此属性“采用 builder 方式设置的 字段最终都丢失了。

    2.6K20

    关于Java8、Lombok注解和Builder注解的相关知识介绍

    这些特性的引入使得Java8成为了更加现代化和强大的编程语言。 二 Java8中的Lombok注解 Lombok是一个Java库,它通过注解来简化Java类的开发。...使用Lombok注解,我们可以自动为类生成getter和setter方法、构造函数等常见的代码。这样可以减少开发者的工作量,并提高代码的可读性。...三 使用Builder注解 构建对象 Builder注解是Lombok库中的一个注解,它可以帮助我们快速构建复杂的对象。...通过在类上添加@Builder注解,Lombok会自动生成一个Builder类,该类具有链式调用的方式来设置对象的属性值。这种方式使得对象的创建变得简单而灵活。...LocalDateTime:组合了日期和时间,但不包含时差和时区信息。 ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。

    1.1K20

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

    父类: import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor...; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @EqualsAndHashCode...@Builder 注解,会有 BUG,即最终的 build() 函数只是返回了空参的构造函数创建了一个 Child 对象,因此属性“采用 builder 方式设置的 id 和 name” 最终“丢失”...因此我们写的代码可能有冲突,我们修改如下: import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import...更多细节可以仔细查看 @Builder 注解的源码和注释,查看官方的手册 https://projectlombok.org/features/Builder 三、总结 遇到诡异的问题一定不要轻易放过。

    2.2K30

    Lombok中关于@Data的使用

    当你在使用 Lombok 的 @Data 注解时,其实会有一些坑需要关注,今天就让我们来见识一下。...Lombok 先来简单介绍一下 Lombok ,其官方介绍如下: Project Lombok makes java a spicier language by adding 'handlers' that...Lombok 提供了一系列的注解帮助我们简化代码,比如: 自动添加类中所有属性相关的 set 方法 看起来似乎这些注解都很正常,并且对我们的代码也有一定的优化,那为什么说@Data注解存在坑呢?...@Data注解 内部实现 由上面的表格我们可以知道,@Data是包含了@EqualsAndHashCode的功能,那么它究竟是如何重写equals()和hashCode()方法的呢?...解决方法 用了@Data就不要有继承关系,类似 Kotlin 的做法。 自己重写equals(), Lombok 不会对显式重写的方法进行生成。

    66520

    每天一小步:如何给Lombok Builder提供默认值

    ,我们将研究如何基于Lombok在实现 Builder模式时为属性提供默认值。...> 3.基于Lombok Builder的POJO 首先,让我们看看 Lombok如何帮助我们从实现 Builder模式所需的样板代码中解脱出来。...5.Lombok的Builder.Default注解 自从Lombokv1.16.16之后,我们就可以使用@Builder.Default注解: // 添加在类上的注解同上 public class Pojo...即使无参构造函数不是 Lombok自动生成而是显式编写的,也取不到默认值。 Builder.Default注解的这种副作用从一开始就有,可能还会持续很长时间。...因此使用无参构造函数与使用Builder具有相同的默认值。 8.总结 至此,我们已经展示了为Lombok Builder提供默认值的几种方法。 Builder.Default注解的副作用也很明显。

    2.6K30

    Lombok介绍和使用

    java.Never write another getter or equals method again, with one annotation your class has a fully featured builder...示例 举个例子看看lombok用和不用的区别 创建一个用户类 不使用Lombok: public class User implements Serializable { private static...@RequiredArgsConstructor 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。...@Data 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。...此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点。

    90420
    领券