带有泛型的生成器

我具有以下层次结构

名为

的双重通用类
public class Service<T,U> 
{
    private final Supplier<T>
    private final Function<T,U>
    private final Consumer<U>
    // more fields and methods ...
}

该类ServiceBuilder<T,U>的构建器,具有通常用于构建器的流利API

public class ServiceBuilder<T,U>
{
    private Supplier<T> supplier;
    private Function<T,U> mapper;
    private Consumer<U> consumer;
    // more fields and methods ....

    public ServiceBuilder<T,U> withSupplier(Supplier<T> supplier)
    {
        this.supplier = supplier;
        return this;
    }

    // more fields and methods ....

    public Service<T,U> build()
    {
        return new Service(supplier,mapper,consumer);
    }
}

基于此,我想提供一个易于使用的T供应商,比方说DummySupplier

public class DummySupplier implements Supplier<SomeObject>
{
    public SomeObject get()
    {
        return new SomeObject();
    }
}

我希望有一个ServiceBuilder<SomeObject,T>可以利用此供应商,可以有效地修复T,这样我只需要一个Function<SomeObject,U> mapper和一个Consumer<U> consumer>就可以建立我的服务。

我该如何处理?扩展ServiceBuilder不起作用,因为我想重用的所有现有方法都返回ServiceBuilder,而不是某些扩展ServiceBuilder的类...

是否存在一些已知的模式?

jzym123 回答:带有泛型的生成器

Function<SomeObject,U> mapperSomeObject都不知道DummySupplier。 该信息必须放置在某个地方,例如SpecializedServiceBuilder

public class SpecializedServiceBuilder<U> extends ServiceBuilder<SomeObject,U> {

    ServiceBuilder withSomeObjectFunction(Function<SomeObject,U> mapper) {
        this.supplier = new DummySupplier();
        this.mapper = mapper;
        return this;
    }
}
,

我不明白为什么需要指定的子类,您可以创建一个工厂方法,为您提供标准的ServiceBuilder<SomeClass,U>

public static <U> ServiceBuilder<SomeClass,U> withDummyBuilder() {
    return new ServiceBuilder<SomeClass,U>().withSupplier(SomeClass::new);
}

然后您可以再次致电withSupplier并取代new SomeClass()供应商,但我不明白为什么会出现问题。

本文链接:https://www.f2er.com/3080688.html

大家都在问