作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下层次结构
名为的双泛型类
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的Supplier,比如说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
...
是否有一些已知的模式可供采用?
最佳答案
都不是Function<SomeObject, U> mapper
也不SomeObject
知道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;
}
}
关于java - 具有泛型的构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58915679/
我是一名优秀的程序员,十分优秀!