如何构建基于lambda的流畅构建器?

时间:2017-04-19 10:32:53

标签: java lambda

我想创建一个基于java.util.Optional的Java流利构建器来简化我的生活

我希望能够称之为:

Person person = Optional.supply(Person::new)
                .with(Person::setName,"Andrew")
                .with(Person::setAge,32)
                .with(Person::setAddress,"10 Downing Street")
                .get();

在我的例子中,我将我的新类称为原始版本的可选项。实际上我复制了它的源代码无法扩展可选。

我可以实现构造函数

public static <T> Optional<T> supply(Supplier<T> supplier)
{
    T value = requireNonNull(supplier).get();
    return new Optional<T>(value);
}

但后来我不知道如何实现流利的二传手。它应该允许我在被保持的实体中设置一个值并返回可选的 self

Setter是目标属性类型的Consumer

那我如何建立自己的流利的可选项?

1 个答案:

答案 0 :(得分:1)

经过一些研究后,我发现setter只是T和V的BiConsumer s,其中T是实体类型,V是属性类型。

想要建立一个流畅的可选setter的人可以使用

public <H> Optional<T> with(BiConsumer<T, H> setter, H value)
{
    requireNonNull(setter);

    if (!isPresent())
        return empty();

    setter.accept(this.value, value);

    return this;
}

分享后代