【发布时间】:2017-10-01 20:20:46
【问题描述】:
我有几个类“X”和“Y”扩展了一个通用抽象类“Base”。几乎所有的配置都在 Base 中。由于配置可能很复杂并且需要灵活,我想为 X 和 Y 编写具有流动接口的 Builder 类。
在我看来,构建器中的大多数 setter 方法都是相同的——毕竟所有公共代码都在公共基类中。因此,我可能应该为“base”编写一个抽象的 Builder。这看起来像:
abstract class Base {
abstract static class Builder {
private int a;
Builder setA(int a) {
this.a = a;
return this;
}
}
}
public class X extends Base {
static class Builder extends Base.Builder {
X build() {
// Do some stuff with the configuration
return new X();
}
}
}
“Y”类看起来很像“X”
客户可以应该阅读
X x = new X.Builder().setA(1234).build();
但这行不通,因为setA() 返回一个Base.Builder,它没有实现build
我并不特别想重载派生构建器中的每个方法以返回正确的类型。这是很多样板代码和令人头疼的维护问题。
我可以使用泛型来告诉抽象构建器它的派生类是什么吗?
【问题讨论】:
-
如果在基础构建器中创建抽象构建方法会怎样?
标签: java