实现实例
/**
* create 2022/12/22 10:39
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductVO {
/**
* 商品SKU,唯一
*/
private Long skuId;
/**
* 商品名称
*/
private String skuName;
/**
* 商品图片路径
*/
private String imgPath;
/**
* 价格
*/
private BigDecimal price;
/**
* 库存
*/
private Integer stock;
//1、在ProductVO中创建一个private的构造函数,参数为builder类型
private ProductVO(Builder builder){
this.skuId=builder.skuId;
this.skuName=builder.skuName;
this.imgPath=builder.imgPath;
}
//2、ProductVO 中创建静态内部类Builder
public static class Builder{
//3、将ProductVO中的参数复制到Builder类中
private Long skuId;//必填
private String skuName;//必填
private String imgPath;//选填
//4、创建一个public的构造函数,参数为ProductVO中必填的
public Builder( Long skuId,String skuName){
this.skuId=skuId;
this.skuName=skuName;
}
//5、创建设置函数,对ProductVO中选填的参数进行赋值,返回值为Builder类型的实例
public Builder setImgPath(String imgPath) {
this.imgPath = imgPath;
return this;
}
//6、创建一个build方法,构建ProductVO的实例并返回
public ProductVO build(){
return new ProductVO(this);
}
}
}
如何使用
在客户端使用链式调用,一步一步的把对象构建出来。
/**
* create 2022/12/22 11:43
*/
public class Test {
public static void main(String[] args) {
ProductVO test = ProductVO.builder().skuId((long) 10).skuName("test").build();
System.out.println(test);
ProductVO aaa = new ProductVO.Builder((long) 10, "aaa").build();
System.out.println(aaa);
}
}
导入jar包
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
遇到的问题
1、问题:缺少有参构造函数。
解决:加注解@AllArgsConstructor