Maison > Java > javaDidacticiel > Comment puis-je obtenir des littéraux de classe à partir de types génériques en Java ?

Comment puis-je obtenir des littéraux de classe à partir de types génériques en Java ?

DDD
Libérer: 2024-12-13 08:51:11
original
157 Les gens l'ont consulté

How Can I Get Class Literals from Generic Types in Java?

Obtention de littéraux de classe à partir de types génériques en Java

Les types génériques sont une fonctionnalité puissante de Java, offrant la sécurité des types et la réutilisabilité du code. Cependant, tenter d'obtenir un littéral de classe pour un type générique, tel que List, soulève certains défis en raison du mécanisme d'effacement de type de Java.

Effacement de type et ses implications

L'effacement de type fait référence au processus par lequel les informations de type contenues dans les types paramétrés sont supprimées lors de la compilation. Par exemple, List et Liste verront leurs arguments génériques effacés et stockés sous forme de liste dans le bytecode.

Cet effacement a des implications importantes. Plus précisément, cela signifie qu’il n’existe pas de littéral de classe pour un type paramétré. En effet, la représentation d'exécution de ces types est simplement une liste, quel que soit le paramètre de type spécifique.

Tentatives infructueuses

Tentatives d'obtention d'un littéral de classe pour un type générique directement, comme List.class, entraînent un avertissement ou une erreur d'incompatibilité de type. L'ajout d'un caractère générique (?) au paramètre de type, comme dans List.class, échoue également en raison d'une erreur de syntaxe.

Approches alternatives

Depuis obtenir un littéral de classe pour un type générique est impossible, des approches alternatives doivent être utilisées. Une option consiste à utiliser @SuppressWarnings("unchecked") pour supprimer les avertissements provoqués par l'utilisation non paramétrée de List.

Cependant, une solution plus élégante consiste à utiliser la réflexion pour introspecter la classe et obtenir son générique. tapez des informations. Ceci peut être réalisé en utilisant la méthode getGenericType() de Field.

Par exemple, le code suivant montre l'obtention des informations de type générique pour un champ de type List :

    Field field = Foo.class.getDeclaredField("list");
    Type type = field.getGenericType();
    if (type instanceof ParameterizedType) {
        ParameterizedType pt = (ParameterizedType) type;
        Class<?> rawType = pt.getRawType();
        Type[] typeArguments = pt.getActualTypeArguments();
        // ... (process the generic type information) ...
    }
Copier après la connexion

Conclusion

Bien que le mécanisme d'effacement de type de Java empêche la création directe de littéraux de classe pour types génériques, des approches alternatives, telles que la réflexion, peuvent être utilisées pour obtenir les informations de type nécessaires. Comprendre les implications de l'effacement de type et utiliser ces méthodes alternatives garantit une gestion précise des types génériques en Java.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal