目录
使用场景
适用于实体类的属性比较多时,因此当我们通过new的方式创建对象时,一般来说我们需要逐个字段的去赋值
举个实体类例子,如下:
public class TradeUserSpuOrderBean {
public TradeUserSpuOrderBean(String stt, String edt, String trademarkId, String trademarkName, String category1Id, String category1Name, String category2Id, String category2Name, String category3Id, String category3Name, Set<String> orderIdSet, String skuId, String userId, String spuId, String spuName, Long orderCount, Double orderAmount, Long ts) {
this.stt = stt;
this.edt = edt;
this.trademarkId = trademarkId;
this.trademarkName = trademarkName;
this.category1Id = category1Id;
this.category1Name = category1Name;
this.category2Id = category2Id;
this.category2Name = category2Name;
this.category3Id = category3Id;
this.category3Name = category3Name;
this.orderIdSet = orderIdSet;
this.skuId = skuId;
this.userId = userId;
this.spuId = spuId;
this.spuName = spuName;
this.orderCount = orderCount;
this.orderAmount = orderAmount;
this.ts = ts;
}
// 窗口起始时间
String stt;
// 窗口结束时间
String edt;
// 品牌 ID
String trademarkId;
// 品牌名称
String trademarkName;
// 一级品类 ID
String category1Id;
// 一级品类名称
String category1Name;
// 二级品类 ID
String category2Id;
// 二级品类名称
String category2Name;
// 三级品类 ID
String category3Id;
// 三级品类名称
String category3Name;
// 订单 ID
Set<String> orderIdSet;
// sku_id
String skuId;
// 用户 ID
String userId;
// spu_id
String spuId;
// spu 名称
String spuName;
// 下单次数
Long orderCount;
// 下单金额
Double orderAmount;
// 时间戳
Long ts;
}
可以看到,我们new对象时,如果没有空参构造函数,那么就需要每个属性逐个的去赋值,十分的麻烦,而且就算有空参构造,那么赋值的时候,也需要set方法,同样不方便,那么是否有方法可以只赋值想要的属性,不赋值的属性使用默认值,然后创建一个对象
构造者模式创建对象
引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
对实体类使用注解@Builder
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import java.util.Set;
@Data
@AllArgsConstructor
@Builder
public class TradeUserSpuOrderBean {
// 窗口起始时间
String stt;
// 窗口结束时间
String edt;
// 品牌 ID
String trademarkId;
// 品牌名称
String trademarkName;
// 一级品类 ID
String category1Id;
// 一级品类名称
String category1Name;
// 二级品类 ID
String category2Id;
// 二级品类名称
String category2Name;
// 三级品类 ID
String category3Id;
// 三级品类名称
String category3Name;
// 订单 ID
@TransientSink
Set<String> orderIdSet;
// sku_id
@TransientSink
String skuId;
// 用户 ID
String userId;
// spu_id
String spuId;
// spu 名称
String spuName;
// 下单次数
Long orderCount;
// 下单金额
Double orderAmount;
// 时间戳
Long ts;
}
构造者创建对象
TradeUserSpuOrderBean test = TradeUserSpuOrderBean.builder()
.skuId(jsonObject.getString("sku_id"))
.userId(jsonObject.getString("user_id"))
.orderAmount(jsonObject.getDouble("split_total_amount"))
.orderIdSet(orderIds)
.ts(DateFormatUtil.toTs(jsonObject.getString("create_time"), true))
.build();
可以看到我们只需要对想要赋值的属性赋值即可,不用每个属性都赋值