Maison >Java >javaDidacticiel >Comment obtenir le type générique d'une « liste » Java à l'aide de Reflection ?

Comment obtenir le type générique d'une « liste » Java à l'aide de Reflection ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 15:05:15377parcourir

How to Get the Generic Type of a Java `List` Using Reflection?

Comment obtenir le type générique de java.util.List

Considérez le code suivant :

List<String> stringList = new ArrayList<String>();
List<Integer> integerList = new ArrayList<Integer>();

A une question fréquente se pose : existe-t-il une méthode simple pour récupérer le type générique du list?

Utiliser la réflexion

Si ces listes sont des champs d'une classe particulière, la réflexion peut être utilisée pour accéder à leurs types génériques :

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;

public class Test {

    List<String> stringList = new ArrayList<>();
    List<Integer> integerList = new ArrayList<>();

    public static void main(String... args) throws Exception {
        Class<Test> testClass = Test.class;

        Field stringListField = testClass.getDeclaredField("stringList");
        ParameterizedType stringListType = (ParameterizedType) stringListField.getGenericType();
        Class<?> stringListClass = (Class<?>) stringListType.getActualTypeArguments()[0];
        System.out.println(stringListClass); // class java.lang.String

        Field integerListField = testClass.getDeclaredField("integerList");
        ParameterizedType integerListType = (ParameterizedType) integerListField.getGenericType();
        Class<?> integerListClass = (Class<?>) integerListType.getActualTypeArguments()[0];
        System.out.println(integerListClass); // class java.lang.Integer
    }
}

Approches alternatives

  • Pour les types de paramètres et les types de retour de méthodes, la réflexion peut également être utilisés.
  • Cependant, si les listes sont dans la même portée de la classe/méthode qui nécessite leurs types génériques, les connaître est redondant, car elles ont déjà été explicitement déclarées.

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!

Déclaration:
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