Le compilateur est responsable de la compréhension des classes génériques au moment de la compilation. Le compilateur est également responsable de l'élimination de cette "compréhension" des classes génériques, dans un processus que nous appelons effacement de type . Tout se passe au moment de la compilation.
Note : Contrairement à ce que pensent la majorité des développeurs Java, il est possible de conserver les informations sur les types au moment de la compilation et de les récupérer au moment de l'exécution, mais de manière très limitée. En d'autres termes : Java fournit des génériques réifiés de manière très limitée. .
Concernant l'effacement des types
Remarquez qu'au moment de la compilation, le compilateur dispose d'informations complètes sur les types, mais que ces informations sont intentionnellement abandonnées. en général lorsque le code binaire est généré, dans un processus connu sous le nom de effacement de type . Cette façon de faire est due à des problèmes de compatibilité : L'intention des concepteurs du langage était de fournir une compatibilité totale du code source et une compatibilité totale du code binaire entre les versions de la plate-forme. S'il était implémenté différemment, vous devriez recompiler vos anciennes applications lorsque vous migrez vers des versions plus récentes de la plate-forme. De la manière dont cela a été fait, toutes les signatures de méthodes sont préservées (compatibilité du code source) et vous ne devez rien recompiler (compatibilité binaire).
Concernant les génériques réifiés en Java
Si vous avez besoin de conserver les informations de type au moment de la compilation, vous devez utiliser des classes anonymes. Le fait est que, dans le cas très particulier des classes anonymes, il est possible de récupérer toutes les informations de type au moment de la compilation au moment de l'exécution, ce qui, en d'autres termes, signifie : des génériques réifiés. Cela signifie que le compilateur ne jette pas les informations de type lorsque des classes anonymes sont impliquées ; ces informations sont conservées dans le code binaire généré et le système d'exécution vous permet de récupérer ces informations.
J'ai écrit un article sur ce sujet :
http://rgomes-info.blogspot.co.uk/2013/12/using-typetokens-to-retrieve-generic.html
Une remarque sur la technique décrite dans l'article ci-dessus est que la technique est obscure pour la majorité des développeurs. Bien qu'elle fonctionne et fonctionne bien, la plupart des développeurs se sentent confus ou mal à l'aise avec cette technique. Si vous avez une base de code partagée ou si vous prévoyez de diffuser votre code au public, je ne recommande pas la technique ci-dessus. En revanche, si vous êtes le seul utilisateur de votre code, vous pouvez profiter de la puissance que cette technique vous apporte.
Exemple de code
L'article ci-dessus contient des liens vers des exemples de code.