从反编译后的UserExt类可以看出,UserExtBuilder并没有从父类User继承来的属性:id、name的填充方法。 解决方案: 在子类和父类中都使用@SuperBuilder,去掉@Builder。但从import的包中也能看到@SuperBuilder注解是experimental实验性的。不知道会不存存在什么潜在风险,慎用。 从反编译后的User 和UserExt类来看: publicab...
@Data@ToString(callSuper=true)publicclassStudentextendsPerson{privateStringschoolName;privateStringgrade;// 对于子类,手动编写全参数构造器,内部调用父类全参数构造器,在子类全参数构造器上使用@Builder注解@BuilderpublicStudent(intweight,intheight,StringschoolName,Stringgrade){super(weight,height);this.schoolName=sc...
(5)继承关系时,子类需要使用 @SuperBuilder。对象继承后,子类的 Builder 因为构造函数的问题,使用不当大概率会报错,并且无法设置父类的属性,还需要使用 @SuperBuilder 来解决问题。 (6)设置默认值需要使用 @Builder.Default。很容易因为对此不了解,导致默认值不符合预期导致出现 BUG。 三 怎么做? 正如《Oh !! St...
对于父类,使用@AllArgsConstructor注解 对于子类,手动编写全参数构造器,内部调用父类全参数构造器,在子类全参数构造器上使用@Builder注解 通过这种方式,子类Builder对象可以使用父类的所有私有属性。 但是这种解法也有两个副作用: @AllArgsConstructor 虽然有这两个副作用,但是这种解法是我找到的唯一一种解决子类使用@Builder...
在面向对象的设计里,继承是非常必要的,我们会把共有的属性和方法抽象到父类中,由它统一去实现,而在进行lombok时代之后,更多的打法是使用@Builder来进行对象赋值,我们直接在类上加@Builder之后,我们的继承就被无情的屏蔽了,这主要是由于构造方法与父类冲突的问题导致的,事实上,我们可以把@Builder注解加到子...
对于父类,使用@AllArgsConstructor注解 对于子类,手动编写全参数构造器,内部调用父类全参数构造器,在子类全参数构造器上使用@Builder注解 通过这种方式,子类Builder对象可以使用父类的所有私有属性。 但是这种解法也有两个副作用: 因为使用@AllArgsConstructor注解,父类构造函数字段的顺序由声明字段的顺序决定,如果子类构造函数...
对于父类,使用@AllArgsConstructor注解 对于子类,手动编写全参数构造器,内部调用父类全参数构造器,在子类全参数构造器上使用@Builder注解 通过这种方式,子类Builder对象可以使用父类的所有私有属性。 但是这种解法也有两个副作用: 因为使用@AllArgsConstructor注解,父类构造函数字段的顺序由声明字段的顺序决定,如果子类构造函数...
这个问题在lombokv1.18.2版本之前其实很难办,但是在这个版本官方引入了一个新的注解@SuperBuilder,无法build父类的问题迎刃而解 The@SuperBuilderannotation produces complex builder APIs for your classes. In contrast to@Builder,@SuperBuilderalso works with fields from superclasses. However, it only works fo...
如果子类直接继承并使用@Builder,可能会因为构造函数使用不当而报错,并且无法设置父类的属性。 关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/618521 问题二:如何在使用@Builder时设置默认值? 如何在使用@Builder时设置默认值? 参考回答: 在使用@Builder时,需要使用@Builder.Default注解来设置...
@Builder注释为你的类⽣成相对略微复杂的构建器API。@Builder可以让你以下⾯显⽰的那样类似于链式的调⽤你的代码,来初始化你的实例对象:Admin admins = Admin.builder().id(admin.getId()).name(admin.getName()).email(admin.getEmail()).department(admin.getDepartment()).username(admin.get...