Lets considérons que nous avons un certain Créateur
abstract class Creator<T>
{
Creator(Class<T> c)
{
this.c = c;
}
T addMainElement(Object obj)
{
return c.cast(this);
}
private Class<T> c;
}
Et une enveloppe
class CreatorWrapper extends Creator<CreatorWrapper>
{
CreatorWrapper() {
super(CreatorWrapper.class);
}
CreatorWrapper addMinorElement(Object obj)
{
return this;
}
}
Le principal avantage de le faire de cette façon que nous pouvons utiliser notre créateur comme ça
CreatorWrapper creator = new CreatorWrapper()
.addMainElement(someObj1)
.addMinorElement(someObj2);
Nous ne serons pas en mesure de le faire si la classe de base n'a aucune connaissance de la classe enfant.
Et nous ne serons pas perturbés par « cast de Décoché main.Creator à T » avertissement que nous serons si nous jetons comme ça
return (T)this;
Voir Java Class.cast() vs. cast operator