OVH Cloud OVH Cloud

généricité ou conversion de type

1 réponse
Avatar
Pif
Bonjour, le class cast est normalement dynamique, au contraire, la
généricité peut etre gérée statiquement ou dynamiquement je crois savoir.

En java, la généricité est exploitée comment ? Quelles en sont les
performances et les limites par rapport à d'autres solutions ?

Merci !

1 réponse

Avatar
TestMan
Bonjour,

En java le transtypage classique "(MonType)" est dynamique
(effectué/vérifié à l'exécution) et provoque le cas échéant un
ClassCastException.

La généricité en Java fonctione par "effacement" (erasure), en clair,
Il n'y a au niveau bytecode pas de différence entre List et List<String>
par exemple ! D'où le fait que les performances soit complètement
identiques (et donc qu'il ne faille pas s'en priver !!!).

En plus, des performances ce choix d'implémentation à pour avantage
d'être compatible au niveau binnaire avec l'ensemble des librairies
existantes (pas besoin de recompiler toutes les bibliothèques, et donc
pas besoin de disposer des sources).

Les limites de cette implementation sont que l'on ne peux pas connaitre
à l'exécution la classe du ou des types paramétrés (mais simplement
leurs contraintes exprimées, par exemple : T dérive de Truc ...). Celà
oblige donc à stocker une référence à la meta-classe exacte s'il on a
des besoins d'instrospection avancées. Mais ce besoin est plutôt rare
pour un developpeur classique (lire "ne developpant pas de framework").

Pour en connatre plus sur les fonctionalités avancés de la généricité en
Java, lire par exemple :
http://www.gafter.com/~neal/2004-Wildcards.ppt

A+

TM

Bonjour, le class cast est normalement dynamique, au contraire, la
généricité peut etre gérée statiquement ou dynamiquement je crois savoir.

En java, la généricité est exploitée comment ? Quelles en sont les
performances et les limites par rapport à d'autres solutions ?

Merci !