Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何构建基于lambda的fluent构建器?_Java_Lambda - Fatal编程技术网

Java 如何构建基于lambda的fluent构建器?

Java 如何构建基于lambda的fluent构建器?,java,lambda,Java,Lambda,我想创建一个基于Java.util.Optional的Java fluent builder来简化我的生活 我希望能够这样称呼它: Person person = Optional.supply(Person::new) .with(Person::setName,"Andrew") .with(Person::setAge,32) .with(Person::setAddress,"10 Downi

我想创建一个基于
Java.util.Optional
的Java fluent builder来简化我的生活

我希望能够这样称呼它:

Person person = Optional.supply(Person::new)
                .with(Person::setName,"Andrew")
                .with(Person::setAge,32)
                .with(Person::setAddress,"10 Downing Street")
                .get();
在我的示例中,我将新类称为Optional,与原始类完全相同。事实上,我复制了它的源代码,无法扩展可选的

我可以实现构造函数

public static <T> Optional<T> supply(Supplier<T> supplier)
{
    T value = requireNonNull(supplier).get();
    return new Optional<T>(value);
}
公共静态可选电源(供应商)
{
T值=requirennull(供应商).get();
返回新的可选值;
}
但是我不知道如何实现fluent setter。它应该允许我在持有的实体中设置一个值并返回可选的self

setter是目标属性类型的消费者


那么,我如何构建自己的fluent可选设置呢?

经过一番研究,我发现setter只是T和V的双消费者,其中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;
}
public可选(双消费者设置器,H值)
{
requirennull(setter);
如果(!isPresent())
返回空();
setter.accept(this.value,value);
归还这个;
}
为子孙共享