4466Fermer4468
UtherLe 28/05/2020 à 16:06
squalyl (./4465) :
perso je vois pas ce que ca ajoute d'instancier les templates.
Ca apporte potentiellement aux performances. Le fait d'avoir un type construit sur mesure peut permettre d'éviter le recours au polymorphisme qui peut parfois être coûteux.
L'autre intérêt c'est en cas de recours a l'introspection (reflection) ou d'autres outils qui affecte le code au Runtime. Personnellement, je déteste ça, mais énormément d'outils Java courants sont basés sur ça.

Godzil (./4466) :
Si c'est du java c'est probablement pour le JIT
Ce choix a surtout été fait à cause de l'historique du langage. C++ n'a pas eu ce genre de problème car la STL est apparue avec les templates. Java lui a été conçu à l'origine pour fonctionner sans génériques. Sa bibliothèque standard qui contenait déjà les collections était conçue en conséquence, en utilisant le polymorphisme.

Quand les génériques ont été introduits dans Java 1.4, la question de le faire sous forme de types réifiés ou non c'est posée. Techniquement les type réifiés étaient tout à fait possibles, mais ils n'auraient pas été utilisables avec le systeme de collection existant dans la bibliothèque standard. Du coup pour conserver la compatibilité avec le fonctionnement existant, les génériques ne sont qu'une surcouche au polymorphisme qui permet de contrôler son bon usage.