2009-07-07 4 views

Répondre

33

Alors que les méthodes typées génériques peuvent être utilisés -

Class<Foo> klass = Foo.class; 
Foo f = klass.newInstance(); 
Foo f = klass.cast(Object); 
+0

Avertissement à quiconque croit que cette réponse est correcte car elle a été acceptée: Cela ne peut pas être correct car le code ne compile pas. 'klass' n'est pas initialisé avant d'être utilisé. –

+5

... (suivi): Notez que le code qui compile - à savoir, 'Class klass = Foo.class;' - soulève la question initiale, car 'Foo.class' semble avoir déjà fourni les informations nécessaires. Cependant, la possibilité d'utiliser des méthodes génériques est la bonne réponse. ce n'est pas clair à partir de l'exemple donné ici. –

14

Il y a une courte mention dans la section Generics de la version 1.5 du guide linguistique:

Plus étonnamment, class Class a été généré. Les littéraux de classe fonctionnent désormais comme des jetons de type, fournissant à la fois des informations de type run-time et compile-time. Cela permet à un style d'usines statiques illustrée par la méthode getAnnotation dans la nouvelle interface AnnotatedElement:

<T extends Annotation> T getAnnotation(Class<T> annotationType); 

Ceci est une méthode générique. Elle en déduit la valeur de son paramètre type T de son argument, et renvoie une instance appropriée de T, comme l'illustre l'extrait suivant:

Author a = Othello.class.getAnnotation(Author.class); 

Avant génériques, vous auriez dû jeter la résultat à Auteur. Aussi, vous auriez eu aucun moyen de faire la vérification du compilateur que le paramètre réel représenté une sous-classe de Annotation

7

La vraie raison est donnée par Neil Gafter:

Lorsque nous avons ajouté des génériques à Java dans JDK5, J'ai changé la classe java.lang.Class pour devenir un type générique. Par exemple, le type String.class est désormais Class < String>. Gilad Bracha a inventé le terme type pour cela. Mon intention était de permettre un style particulier de l'API, que Joshua Bloch appelle le THC, ou le type de conteneur hétérogène Hygiène Types .

Questions connexes