2011-02-16 1 views
1

Je voulais savoir si Generics fourni à partir de Java5 présente des avantages en termes d'exécution. Je veux dire, je sais que nous pouvons obtenir la sécurité de type pour les classes/collections et permettre une gamme d'objets possibles pour un générique, mais y a-t-il des avantages à l'exécution avant la compilation?Java Generics - avantages de l'exécution

+1

Qu'est-ce que cela veut dire "avoir le temps d'exécution avant la compilation"? Comment courriez-vous sans compiler d'abord? – CoolBeans

+2

Eh bien, le bénéfice d'exécution est moindre ClassCastExceptions – samitgaur

+0

Moins d'exceptions ClassCast ne sont pas vraiment un avantage d'exécution - vous ne les obtenez pas quand même si votre code est correct. L'avantage est qu'il est plus facile d'écrire du code correct. – paulmurray

Répondre

10

Les génériques Java sont supprimés à l'exécution via erasure, les performances doivent donc être identiques.

0

Oui - mais c'est très mineur. Lorsque vous utilisez des génériques, vous n'avez pas besoin d'utiliser instanceof et de les transtyper partout, de sorte que les instructions de type bytecode qui vérifient le type pour ces instructions ne sont pas générées. En revanche, vous pouvez vous retrouver avec des erreurs de bas niveau lors de l'exécution si vous liez les anciennes versions de vos classes sans les recompiler. Cependant, si vous utilisez beaucoup une boucle serrée qui aurait autrement besoin d'une distribution, alors je suppose que les génériques pourraient accélérer un tout petit peu. Mais l'amélioration des performances n'est pas le but de les utiliser.

+1

La plupart des instructions de casting sont toujours générées par le compilateur, et lorsque vous avez écrit votre programme sans génériques, vous n'avez pas besoin de vos instances de tests. –