Les generics au sein de Java > 2. Comparaison avec C# 2.0
|
La comparaison avec C# 2.0 n'est pas flagrante : les deux langages utilisent la même syntaxe, à peu de choses près. La sémantique est également la même. La différence majeure se situe dans l'interprétation.
Les génériques sont implémentés dans Java de telle sorte qu'ils n'auront aucune conséquence sur le code compilé ou la JVM : le byte-code généré reste le même, que le code utilise les generics ou non. En comparaison, les classes génériques écrites en C# sont instanciées lors du lancement même de l'application, tandis que Java les remplace par des types Object - et met en place les transtypages nécessaires.
Cela implique donc une légère perte de performances en Java lors de l'exécution, là où C# tente d'optimiser au mieux le traitement de ces types génériques. Par ailleurs, la génération de code ou la réflexion ne marchera pas aussi bien en Java qu'en C#, pour cette même raison de perte du type original lors de la compilation.
Cela étant, là où auparavant pour accomplir la même généricité, un développeur n'avait d'autre choix que de passer par Object (ou un ArrayList d'Object s), Java 5.0 a été conçu pour prendre en compte les generics de la manière la plus optimisée possible.
|