- 场景
*/
private String scene;
}
这时候我们再使用Builder注解就会发现,在子类中无法通过builder方法构造父类中的成员变量
给BaseDTO上加上Builder注解也不会有任何效果。事实上,Builder注解只管承接注解的这个类,而不会管他的父类或者子类。如果真的是这样的话,遇到有继承的类,只好又打回原形,写一堆的setter方法了。
试试SuperBuilder吧
===================
这个问题在lombokv1.18.2版本之前其实很难办,但是在这个版本官方引入了一个新的注解@SuperBuilder,无法build父类的问题迎刃而解
The @SuperBuilder annotation produces complex builder APIs for your classes. In contrast to @Builder, @SuperBuilder also works with fields from superclasses. However, it only works for types. Most importantly, it requires that all superclasses also have the@SuperBuilder annotation.
按照官方文档的说法,为了能够使用build方法,只需要在子类和父类上都加@SuperBuilder注解,我们试一下
果然现在就可以在子类的实例中build`父类的成员变量了
Lombok的原理
=============
Lombok自动生成代码的实现也是依赖于JVM开放的扩展点,使其可以在编译的时候修改抽象语法树,从而影响最终生成的字节码
图片来源地址:http://notatube.blogspot.com/2010/12/project-lombok-creating-custom.html
为什么Builder不能处理父类的成员变量
======================