关于 @Builder 和 @SuperBuilder
了解@SuperBuilder
@SuperBuilder解决了什么样的问题
将例子中的Ming这个类的成员属性放到父类当中:
public class Person { private Integer age; private String name; } @Builder public class Ming extends Person{ }
这个时候,我们之前的调用的 .builder 都会报错,这是因为@Builder并不支持父类成员属性的构造,@SuperBuilder注解的出现,就是用来解决这个问题。
@SuperBuilder public class Person { private Integer age; private String name; } @SuperBuilder public class Ming extends Person{ }
这样子类就可以正常获取到父类的成员属性进行builder构造了。
@SuperBuilder(toBuilder = true)用法
toBuilder属性默认关闭,如果开启,则所有的父类应该也要开启,效果如下:
Ming mingD = Ming.builder() .age(11) .name("小明") .build(); Ming mingF = mingD.toBuilder().name("猪").build(); System.err.println(mingD.toString()); System.err.println(mingF.toString());
通过设置true,所有的类实例会拥有toBuilder方法
这是一个类似深拷贝的一个方法,不会改变原有实例的属性,生成一个新的实例。在toBuilder中有赋值的属性则会改变为赋值属性,没有赋值的以调用的实例中的值为准。
@SuperBuilder(buildMethodName = “execute”, builderMethodName = “helloWorld”, toBuilder = true) 用法
这个用法其实没什么意思,就是自定义方法名,不展开赘述。
郭慕荣博客园