假設我需要一些DerivedBuilder
來擴展一些BaseBuilder
。基本構建器有一些方法,如foo
(它返回BaseBuilder
)。派生建築師有方法bar
。應在方法foo
後調用方法bar
。爲了做到這一點,我可以在DerivedBuilder
像這樣覆蓋foo
方法:Java通用構建器
@Override
public DerivedBuilder foo() {
super.foo();
return this;
}
的問題是,BaseBuilder
有很多像foo
方法,我必須重寫他們中的每一個。我不想這樣做,所以我嘗試使用泛型:
public class BaseBuilder<T extends BaseBuilder> {
...
public T foo() {
...
return (T)this;
}
}
public class DerivedBuilder<T extends DerivedBuilder> extends BaseBuilder<T> {
public T bar() {
...
return (T)this;
}
}
但問題是,我仍然不能寫
new DerivedBuilder<DerivedBuilder>()
.foo()
.bar()
即使T
這裏是DerivedBuilder
。我可以做什麼以避免覆蓋很多功能?
有了這個計算策略仿製藥,你可以撥打:'新DerivedBuilder()。 FOO()。欄()'。它將首先工作並執行'foo',然後執行'bar'。如果你想調用更多的'BaseBuilder'方法,最後你想調用'DerivedBuilder'方法,那麼這是不可能的,因爲第二次,方法返回'BaseBuilder'的引用,你不能調用'DerivedBuilder' s方法。 –
@ Sandeep.KI試圖執行該操作,編譯器抱怨''Bar'沒有在'BaseBuilder'中定義,因爲那時我執行'.foo().bar()'編譯器在執行'foo之後唯一知道'T'的東西'是這個'T'擴展了'BaseBuilder' – PepeHands
請參見[this](http://stackoverflow.com/questions/4217013/how-to-force-derived-class-to-call-super-method-like-android -does)和[this](http://stackoverflow.com/questions/6853638/require-override-of-method-to-call-super)和[this](http://stackoverflow.com/questions/6142460/how-do-i-force-a-polymorphic-call-to-the-super-method)... – user1803551