lombok中的@Builder.Default注解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lombok中的@Builder.Default注解相关的知识,希望对你有一定的参考价值。
参考技术A lombok中的@Builder.Default注解为成员变量赋默认值(1)只对成员变量设置默认值,builder构造默认值是无效的
如果我们用,java的new操作,是会对Student设置默认值的
但是Builder是无效的
原因在于,编译生成的Student.class文件,保留了成员变量的初始值,但是在StuentBuilder中,只有成员变量,而没有默认值
(2)设置@Builder.Default注解后,通过标识判断是否启用默认值
可以看到编译生成的.class文件,没有对age设置默认值。所以new出现的对象肯定没有设置默认值。
其次,通过引入标识 age$set ,判断是否启用默认值
this.age$set 默认是 false ,只有在
中才对其进行赋值为 true 。
也就是说,如果不调用 Student s = Student.builder().age(4).build(); , age$set 为 false ,执行 Student.$default$age() 方法,设置默认值。否则,获取 this.age 。
。
【总结】
(1)不用@Builder.Default,为成员变量设置默认值,new出来的对象自带默认值
(2)启用@Builder.Default,new出来的对象为空对象,不带默认值
(3)启用@Builder.Default,不设置-> Student.builder().build() ,为默认值
(4)启用@Builder.Default,设置-> Student.builder().age(4).build() ,为设置的值
关键看 Student.class 文件
Lombok中的@EqualsAndHashCode
@EqualsAndHashCode(callSuper = false)lombok 默认,忽略父类继承属性,自身相等即相当
@EqualsAndHashCode(callSuper = true),比对子类(自身)属性和父类继承属性
以上是关于lombok中的@Builder.Default注解的主要内容,如果未能解决你的问题,请参考以下文章