Maison > Java > javaDidacticiel > le corps du texte

Comment pouvez-vous déterminer la classe d'un type générique au moment de l'exécution ?

Mary-Kate Olsen
Libérer: 2024-11-19 02:12:02
original
471 Les gens l'ont consulté

How Can You Determine the Class of a Generic Type at Runtime?

Détermination de la classe d'un type générique

Dans le domaine de la programmation générique, il peut être impératif de déterminer la classe du type générique étant utilisé. Cependant, comme c'est la nature des génériques, les informations de type sont généralement effacées au moment de l'exécution, ce qui présente un défi pour les récupérer ultérieurement.

Exemple :

Considérez le générique suivant class :

public class MyGenericClass<T> {
  public void doSomething() {
    // ...
    T bean = (T)someObject.create(T.class);
    // ...
  }
}
Copier après la connexion

Dans l'exemple ci-dessus, nous tentons de créer une instance de classe T en passant un littéral de classe. Cependant, cela entraînera une erreur « Littéral de classe illégal pour le paramètre de type T », car il est interdit de tenter d'utiliser le type générique comme littéral de classe.

Solution de contournement :

Pour surmonter ce défi, une solution de contournement viable consiste à transmettre la classe du type générique en tant que paramètre à une méthode statique. Cette méthode utilisera ensuite l'API de réflexion pour instancier le type générique.

public class MyGenericClass<T> {

    private final Class<T> clazz;

    public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) {
        return new MyGenericClass<>(clazz);
    }

    protected MyGenericClass(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void doSomething() {
        T instance = clazz.newInstance();
    }
}
Copier après la connexion

En suivant cette approche, nous contournons la restriction interdisant l'utilisation de types génériques comme littéraux de classe, garantissant ainsi que les informations de type nécessaires sont disponibles au moment de l'exécution. . Bien qu'il s'agisse d'une solution peu élégante, elle offre un moyen de déterminer la classe d'un type générique dans un contexte difficile comme celui présenté dans l'exemple original.

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