Pourquoi le Class<T>
de Java est-il générique?Pourquoi la classe <T> de Java est-elle générique?
Répondre
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);
est ici un assez bon résumé des avantages: http://download.oracle.com/javase/tutorial/extra/generics/literals.html
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
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 .
- 1. Pourquoi la classe de méthode Java n'est-elle pas générique?
- 2. Java Generics avec classe <T>
- 3. Java: la conversion générique génère un avertissement, pourquoi?
- 4. Classe de magasin générique dans le champ en Java
- 5. classe hérite dictionnaire générique <string, IFoo> Interface et
- 6. Générique Parent Pour Générique Classe
- 7. Est-ce que la classe T dans la classe générique <T> est assignable d'une autre classe?
- 8. Référence de classe de la classe de paramètre générique
- 9. La classe Java question
- 10. Méthode générique dans une classe non générique?
- 11. Comment déterminer la classe d'un type générique?
- 12. C#: Ajouter une méthode générique conditionnelle (restriction générique différente) dans la classe générique
- 13. constructeurs ambigus/contradictoires dans la classe générique
- 14. objet au début de la liste générique <T>
- 15. Java: récupération de la valeur du paramètre générique à l'exécution
- 16. alternatif rubis à la classe << chose
- 17. Surcharge << opérateur C++ - Pointeur vers la classe
- 18. Version problème de fabrique de classe générique
- 19. liste générique simple en java
- 20. classe générique et méthodes génériques
- 21. Construction d'une classe java générique où T est une classe foo ou une sous-classe de foo
- 22. Pourquoi ma méthode générique a-t-elle cessé de fonctionner?
- 23. C# - classe générique à jeter sa classe de base non générique
- 24. Dans la méthode générique <T> doSth (Liste <T> l), vérifiez si T implémente Comparable?
- 25. Création d'un générique basé sur la classe de type
- 26. classe de base générique pour WinForm UserControl
- 27. La classe Private Accessor ignore la contrainte générique
- 28. Pourquoi l'importation de la classe pas nécessaire lorsque la méthode appelant exemple (Java)
- 29. Problème avec la substitution de "operator <<" dans la classe dérivée de "ostream"
- 30. Classe HTML avec <select>
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é. –
... (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. –