Builder泛型构造对象

本文介绍了如何在Java中使用Builder.of方法创建`BidResp`类的对象,展示了如何通过`Supplier`和`Consumer`接口实现构造器模式,以及如何逐步设置对象属性。
摘要由CSDN通过智能技术生成

系列文章目录

Java 建造者 Builder.of



一、示例实体

代码如下(示例):

/**
 * @descriptions: BidResp
 * @author: 
 * @date: 2024/2/29 15:07
 * @version: 1.0
 */
@Data
public class RespTest implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private String field;
    private String type;
    private String value;
    private String status;
}

二、构造工具

1.引入库

代码如下(示例):

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

2.工具类

代码如下(示例):

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) {
        RespTest resp = Builder.of(RespTest ::new)
                .with(RespTest ::setField,"animal")
                .with(RespTest ::setName,"cat")
                .with(RespTest ::setType,"01")
                .with(RespTest ::setValue,"1000")
                .with(RespTest ::setStatus,"1")
                .build();
        System.out.println("RespTest 对象:" + resp );
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值