Salut,
Je programme régulièrement en Java, et je n'ai pas vraiment de problème avec le type-erasure.
Et surtout je n'ai jamais eu de problème de confusion sur le type d'une collection.
Sinon il y a bien des avantages à utiliser le type-erasure :
- C'est évolutif : il est possible de "générifié" une classe sans "casser" le code existant.
- C'est compatible avec des langages qui ne possède pas de notion de Generics : ils peuvent quand même utiliser les types paramétrés sans paramétrages.
- Cela permet une variance/covariance bien plus complète (malgré une syntaxe un peu lourde en Java - mais ceci n'est pas lié au type-erasure).
- Une seule version du code est partagé par toutes les instances, ce qui implique moins de travail pour le compilateur JIT, et moins d'utilisation mémoire (car on n'a pas à stocker les duplications de classes).
Tout ceci pour des désavantages plutôt anecdotique mais tellement décrié !!!
Sinon coté performances je doute qu'il y ait une réelle différence avec la réification... tant qu'on reste sur des références (or les Generics de Java ne s'appliquent qu'aux références).
Le gros intérêt de la réification vient de son utilisation avec les types primitifs/values !
C'est là tout l'intérêt de la réification, car on peut alors s'adapter aux spécificités du types, et en particulier son empreinte mémoire.
Et justement le projet Valhalla qui a pour but d'apporter des types-values dans Java prévoit d'intégrer des "Generic-reified"... mais uniquement pour les types primitifs/values.
Car il y a peu d'intérêt pour les références !
a++
Partager