Maison > Java > javaDidacticiel > Comment puis-je récupérer des informations de type générique à l'aide de Java Reflection ?

Comment puis-je récupérer des informations de type générique à l'aide de Java Reflection ?

Patricia Arquette
Libérer: 2024-12-16 00:27:11
original
816 Les gens l'ont consulté

How Can I Retrieve Generic Type Information Using Java Reflection?

Comprendre la saisie de paramètres génériques en Java avec réflexion

Identifier le type de paramètres génériques en Java par réflexion peut être une technique précieuse dans l'analyse de code et manipulations. Dans cet article, nous aborderons les défis et les solutions impliqués dans la récupération de la classe réelle associée à un paramètre de type générique.

Le défi : récupérer des informations de type générique

Considérez l'extrait de code suivant :

public final class Voodoo {
    public static void chill(List<?> aListWithTypeSpiderMan) {
        // Here we aim to obtain the Class object for 'SpiderMan'
        Class<?> typeOfTheList = ???;
    }

    public static void main(String... args) {
        chill(new ArrayList<SpiderMan>());
    }
}
Copier après la connexion

Notre objectif est de déterminer le type du paramètre générique dans la méthode de refroidissement. Plus précisément, nous souhaitons extraire la classe SpiderMan.

La solution : utiliser des mécanismes de réflexion

Les capacités de réflexion de Java fournissent un mécanisme permettant d'accéder et de manipuler les informations de classe et de méthode au moment de l'exécution. . Pour découvrir le type d'un paramètre générique, nous pouvons utiliser l'approche suivante :

Class<?> persistentClass = (Class<?>)
((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
Copier après la connexion

Ce code utilise les techniques suivantes :

  • getClass() : Obtient l'objet classe représentant la classe actuelle (Voodoo dans ce cas cas).
  • getGenericSuperclass() : Récupère la superclasse générique de la classe actuelle (qui étend une autre classe avec des paramètres de type).
  • getActualTypeArguments() : Récupère un tableau des arguments de type réels passés au générique superclasse.
  • Casting to Class : convertit l'argument de type obtenu (une instance de Type) en un objet Class.

Remarque

L'extrait de code fourni suppose que la classe actuelle (Voodoo) étend une superclasse qui déclare les paramètres de type. Si ce n'est pas le cas, des ajustements seraient nécessaires pour adapter le code de réflexion en conséquence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal