Maison >Java >javaDidacticiel >Comment déterminer la classe d'un type générique en Java au moment de l'exécution ?

Comment déterminer la classe d'un type générique en Java au moment de l'exécution ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-12 07:39:02758parcourir

How to Determine the Class of a Generic Type in Java at Runtime?

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

En Java, lorsqu'il s'agit de classes génériques, il est souvent nécessaire de déterminer le type spécifique qu'un type générique contient exécution. Cependant, les informations de type générique sont effacées lors de la compilation, ce qui rend difficile l'accès direct à celles-ci.

Prenons un exemple :

public class MyGenericClass<T> {

  public void doSomething() {
    T instance = (T) thirdPartyLib.create(T.class);
  }
}

Dans ce scénario, T.class entraînera un Erreur littérale de classe illégale car le type générique T est inconnu. Pour résoudre ce problème, une solution de contournement est nécessaire.

Solution de contournement

Une solution de contournement efficace consiste à transmettre le type en tant que paramètre à une méthode statique, qui fournira les informations de classe à la classe générique. Voici un exemple :

public class MyGenericClass<T> {

  private final Class<T> type;

  public static <U> MyGenericClass<U> createWithClass(Class<U> type) {
    return new MyGenericClass<>(type);
  }

  private MyGenericClass(Class<T> type) {
    this.type = type;
  }

  public void doSomething() {
    T instance = type.newInstance();
  }
}

Cette méthode vous permet de transmettre explicitement le type de classe, garantissant que la classe générique a accès aux informations nécessaires. Bien que cette solution de contournement ne soit peut-être pas la solution la plus élégante, elle constitue un moyen fiable de déterminer la classe d'un type générique au moment de l'exécution.

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