Re: Chained call pattern with inheritance, polymorphism and generics...
On Sep 28, 6:57 pm, Roedy Green <see_webs...@mindprod.com.invalid>
wrote:
On Fri, 28 Sep 2007 10:57:44 +0200, Piotr Kobzda <pi...@gazeta.pl>
wrote, quoted or indirectly quoted someone who said :
What's wrong then with pattern presented by Daniel to achieve that?
I can't make any sense of it.
--
Roedy Green Canadian Mind Products
The Java Glossaryhttp://mindprod.com
What if I changed it to this:
public class BaseBuilder<T> {
private String something;
public T something(String something) {
this.something = something;
return getChainTarget();
}
protected abstract T getChainLink();
}
public class SpecificBuilder extends BaseBuilder<SpecificBuilder> {
private String other;
public SpecificBuilder other(String other) {
this.other = other;
}
protected SpecificBuilder getChainLink() {
return this;
}
}
SpecificBuilder b = new
SpecificBuilder().something("Hello").other("World!");
This works since something() returns T, which in SpecificBuilder IS
SpecificBuilder.
The problem with my solution is that I can't have:
class MoreSpecificBuilder extends SpecificBuilder {
public void doMore() {
}
protected MoreSpecificBuilder getChainLink() {
return this;
}
}
new MoreSpecificBuilder().something("hello").doMore(); // whoops!
If "something()'s" return type could be "the compile time type of the
reference to this object", a.k.a ThisType, then it would work just
fine. Unfortunately, thats not yet a feature. Makes one long for a
weakly typed language :-)