Lombok注解之@SuperBuilder--解决无法builder父类属性问题

2022-11-13 17:11:36 lombok 注解 SuperBuilder

前言:Lombok的小坑之 @Builder注解不能 build 父类属性

正文在第三个目录下,学习@SuperBuilder注解的话可以直接根据目录跳到正文所在

一.老规矩

先上文档官方文档链接@SuperBuilder

二.判断是否为相同问题(@Builder注解不能 build 父类属性)

前提情况判断

首先是父类和子类的代码情况这里直接附图

会出现的基本常见(最常见问题)无法builder父类属性

我们会看到这里面提示: 无法解析“SonObjectBuilder”中的方法“age”

三.@SuperBuilder注解

1. 概念(需要注意您的Lombok版本)

  • @SuperBuilder在 lombok v1.18.2 中作为实验性功能引入
  • @SuperBuildertoBuilder`lombok v1.18.4 添加了对自定义 的功能和有限支持
  • @SuperBuilderlombok v1.18.14 扩展了定制的可能性

2. 如何解决无法builder父类属性

官网给出的方法

@SuperBuilder注释为您的类生成复杂的构建器 api 。与 相比@Builder,@SuperBuilder也适用于超类中的字段。但是,它仅适用于类型。最重要的是,它要求所有超类也有@SuperBuilder注释。

code这里依旧使用图片来做对比展示

结果

不再提示: 无法解析“SonObjectBuilder”中的方法“age”解决问题!!!

3. 遇到的一个小坑(Lombok1.18.2)

  • 这里只是简单的处理了Builder注解没有办法builder属性的问题
  • 如果父子类都是您新建的那么问题不是很大
  • 但是有一种可能就是父类已经存在很久了,所以请检查一下原本的父类在被@Builder修饰的时候有没有在某一个参数上使用了@Builder.Default

前提条件依旧图片展示

首先展示的是父子类

其次是builder代码如下

我们可以发现emmmmmm,貌似idea并没有提示什么,但是当我们进行编译的时候就会发现(!!!)

我们找到是对应的第14行代码

处理方法删除子类的无参构造注解和父类的无参全参两个注解如下图

再次运行问题解决!!!(全体起立!)

对于1.18.10以上的版本此问题已经被解决, 即@Builder.Default可以与@SuperBuilder在无参和全参构造注解的情况下使用

至于1.8.2至1.8.10之间版本本人没有具体测试过,所以需要看情况进行使用

四.总结

对于lombok的@SuperBuilder----->>>注意版本注意版本还是注意版本!!!

其他功能这里暂时不做赘述,可以自己根据官网文档进行尝试,(以后可能更新)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

相关文章