【发布时间】:2012-06-13 16:14:09
【问题描述】:
我正在解决一个问题,其中有几个Foo 的实现,伴随着几个FooBuilder。虽然Foo 共享几个需要设置的公共变量,但它们也有不同的变量,需要它们各自的FooBuilder 来实现一些特定的功能。为简洁起见,我想让FooBuilder 的设置器使用方法链接,例如:
public abstract class FooBuilder {
...
public FooBuilder setA(int A) {
this.A = A;
return this;
}
...
}
和
public class FooImplBuilder extends FooBuilder{
...
public FooImplBuilder setB(int B) {
this.B = B;
return this;
}
public FooImplBuilder setC(int C) {
this.C = C;
return this;
}
...
}
等等,有几个不同的FooBuilder 实现。这在技术上可以满足我的所有需求,但是,这种方法在执行方法链接时对方法调用的顺序很敏感。以下有方法未定义的编译错误:
someFoo.setA(a).setB(b)...
要求开发人员考虑链中方法调用的顺序。为了避免这种情况,我想让FooBuilder 中的设置器以某种方式返回实际的实现子类。但是,我不确定如何执行此操作。最好的方法是什么?
【问题讨论】:
-
另外,它要么强制在任何地方强制转换,要么阻止您在需要时更改超类的属性。
标签: java interface subclass superclass