2009-05-28 4 views

Répondre

2

En Java, Generics sont disponibles au moment de la compilation. Vous ne pouvez pas déterminer le type générique lors de l'exécution. Cela a permis à l'implémentation des génériques d'être rétrocompatible avec les anciennes versions de la JVM.

Puisque les génériques ne sont disponibles au moment de la compilation, si vous connaissez le type de votre classe, vous n'avez pas besoin d'utiliser la réflexion.

+1

j'allais répondre à quelque chose de similaire, donc au lieu que je vais ajouter ici: Le compilateur Java efface les informations de type sur les génériques à la compilation. Puisque la réflexion est évaluée au moment de l'exécution, toutes les informations de type auront déjà été effacées, ce qui la rendra presque inutile. – Pesto

+1

Ce n'est pas vrai. Voir http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/TypeLiteral.html – robson

+0

Pesto: Il ne supprime pas le type de retour effacé de la méthode! –

1

Il aurait été pas déraisonnable de faire Method générique sur le type de retour effacé. Cependant, ce serait beaucoup d'effort avec peu de gain. La nature de la réflexion est que vous ne connaissez pas les types lors de la compilation - sinon vous pourriez établir un lien statique.

Je suppose que vous pouvez dans certains cas, même ajouter de nouvelles API afin que le type générique est retourné. L'information est toujours sur la méthode, mais pas à partir de l'instance que vous lui passez.