Maison >Java >javaDidacticiel >Comment récupérer le type générique d'une « liste » Java à l'aide de Reflection ?
Récupération du type générique d'une Java.util.List
En Java, un paramètre de type générique permet à une classe ou une interface d'opérer sur données de différents types. Par exemple, une liste peut stocker des éléments de n'importe quel type. Pour accéder au type générique d'une liste, on peut utiliser Java Reflection.
Utiliser Reflection pour obtenir le type générique
La méthode getGenericType() de la classe Field renvoie le type générique du champ. Pour un champ Liste, il s’agit d’un ParameterizedType. Pour extraire le type générique réel, convertissez le ParameterizedType en type de la liste.
Le code suivant montre comment récupérer le type générique d'une liste à l'aide de la réflexion :
import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.List; public class GetGenericType { List<String> stringList = new ArrayList<>(); List<Integer> integerList = new ArrayList<>(); public static void main(String[] args) throws Exception { Class<GetGenericType> clazz = GetGenericType.class; Field stringListField = clazz.getDeclaredField("stringList"); ParameterizedType stringListType = (ParameterizedType) stringListField.getGenericType(); Class<?> stringListClass = stringListType.getActualTypeArguments()[0]; System.out.println(stringListClass); // class java.lang.String Field integerListField = clazz.getDeclaredField("integerList"); ParameterizedType integerListType = (ParameterizedType) integerListField.getGenericType(); Class<?> integerListClass = integerListType.getActualTypeArguments()[0]; System.out.println(integerListClass); // class java.lang.Integer } }
Dans ce Par exemple, la méthode getGenericType() est utilisée pour récupérer le type générique des champs stringList et integerList, qui sont des instances de ParameterizedType. L'accès à la méthode getActualTypeArguments() de ces types renvoie les types génériques réels, qui sont imprimés respectivement sous forme de chaîne et d'entier.
Il est important de noter que la réflexion peut être coûteuse et ne doit être utilisée que lorsque cela est nécessaire. Dans le contexte de votre code, si les types génériques de stringList et integerList sont déjà connus ou peuvent être déduits dans la portée actuelle, l'utilisation de la réflexion n'est pas nécessaire. Cependant, la réflexion peut être utile lorsque vous travaillez avec des types génériques créés dynamiquement ou inconnus au moment de la compilation.
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!