Builder泛型构造对象

系列文章目录

Java 建造者 Builder.of



一、示例实体

代码如下(示例):

/**
 * @descriptions: BidResp
 * @author: kangsx184@163.com
 * @date: 2024/2/29 15:07
 * @version: 1.0
 */
@Data
public class BidResp implements Serializable {
    private static final long serialVersionUID = 2765186138872355068L;
    private String name;
    private String field;
    private String type;
    private String value;
    private String isRequired;
}

二、构造工具

1.引入库

代码如下(示例):

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

2.工具类

代码如下(示例):

/**
 * @descriptions: 构造对象
 * @author: kangsx184@tydic.com
 * @date: 
 * @version: 1.0
 */
public class Builder<T> {
    private final Supplier<T> instantiate;
    private final List<Consumer<T>> setterList = new ArrayList<>();
    private Builder(Supplier<T> instantiation) {
        this.instantiate = instantiation;
    }
    public static <T> Builder<T> of(Supplier<T> instantiator){
        return new Builder<>(instantiator);
    }
    public <P> Builder<T> with(IOneParamSetter<T, P> setter, P p) {
        Consumer<T> c = instance -> setter.accept(instance, p);
        setterList.add(c);
        return this;
    }
    public <P0, P1> Builder<T> with(ITwoParamSetter<T, P0, P1> setter, P0 p0, P1 p1) {
        Consumer<T> c = instance -> setter.accept(instance, p0, p1);
        setterList.add(c);
        return this;
    }
    public T build() {
        T value = instantiate.get();
        setterList.forEach(setter -> setter.accept(value));
        setterList.clear();
        return value;
    }
    @FunctionalInterface
    public interface IOneParamSetter<T, P> {
        void accept(T t, P p);
    }
    @FunctionalInterface
    public interface ITwoParamSetter<T, P0, P1> {
        void accept(T t, P0 p0, P1 p1);
    }
}

调用代码如下(示例):

/**
 * @descriptions:
 * @author: kangsx184@tydic.com
 * @date: 2024/4/18 10:24
 * @version: 1.0
 */
public class test {
    public static void main(String[] args) {
        BidResp bidResp = Builder.of(BidResp::new)
                .with(BidResp::setField,"animal")
                .with(BidResp::setName,"cat")
                .with(BidResp::setType,"01")
                .with(BidResp::setValue,"1000")
                .with(BidResp::setIsRequired,"1")
                .build();
        System.out.println("BidResp对象:" + bidResp);
    }
}
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值