Montons sur les épaules de nos aînés !
Je ne crois pas l'avoir vu cité dans les 4 pages de ce thread, mais ce qui est proposé ici ressemble à s'y méprendre à un sous-cas des "anchored declarations" (désolé, je n'ai pas la traduction francaise en tête) du langage Eiffel (déjà présent dans le langage Eiffel en 1990 :-)
lien : http://archive.eiffel.com/doc/online...l#pgfId-515701
Eiffel va même plus loin que ce qui est proposé (notamment on peut aussi utiliser le mot clé proposé 'This' dans des arguments de la méthode, et on peut lier des arguments entre eux sans qu'ils soient du type de la classe.
Ca permet d'etre plus concis dans l'ecriture de la classe et des classes filles, et d'avoir plus de verifications par le compilateur, moins de casts explicites dans les classes utilisatrices, et les IDEs pourraient a la volée, dans la complétion automatique, remplacer les "ancres de type" comme le 'This' par le type correspondant à la complétion en cours (toujours en typage statique fort, basé sur le type donné à la variable pour laquelle on propose la complétion automatique).
Utilisation classique qu'on pourrait avoir : si des template methods s'appuient sur le type de la classe en retour, il ne serait plus nécessaire de choisir entre soit redéfinir la template méthode pour renvoyer le type de retour de la sous-classe (code inutile dans la sous-classe), et soit faire des casts explicites dans la classe utilisatrice (alors qu'avec la nouvelle proposition le compilateur peut vérifier cela).
Cela peut effectivement être simulé avec les Generics : création d'un paramètre formel contraint sur le type de la classe, et dans les classes filles, renforcement de la contrainte sur le type des classes filles.
Mais : c'est lourd, répétitif dans chaque sous-classes et avec risque d'oubli (donc d'erreur), et ca ne permet pas d'exprimer ni aussi clairement, ni avec certitude, la contrainte "le type retourne doit toujours correspondre au type courant" au niveau de la classe mère.
C'est donc un très grand plus pour moi : c'est quasi transparent pour les utilisateurs des classes, avec les possibilités des IDEs modernes (une fois adaptés bien sûr), et également plus sûr pour eux.
Et c'est intéressant pour les concepteurs de hiérarchies de classes réutilisables.