Maison > Java > javaDidacticiel > Comment déterminer la classe d'un type générique en Java ?

Comment déterminer la classe d'un type générique en Java ?

Patricia Arquette
Libérer: 2024-11-15 22:18:02
original
243 Les gens l'ont consulté

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

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

Dans le domaine de la programmation générique, il devient souvent crucial de déterminer la classe spécifique du type générique actuellement utilisé. utiliser. Cependant, le mécanisme générique d'effacement de type de Java pose un défi à cette entreprise.

Pour résoudre ce problème, examinons un exemple qui imite un scénario du monde réel :

public class MyGenericClass<T> {
  public void doSomething() {
    // Imagine a 3rd party library call that expects a Class object
    T bean = (T) someObject.create(T.class);
  }
}
Copier après la connexion

Malheureusement, le Le code ci-dessus échouera avec une erreur « Littéral de classe illégal pour le paramètre de type T ». En effet, les informations de type générique sont effacées au moment de l'exécution, rendant impossible l'utilisation directe de T.class.

Alors, comment pouvons-nous surmonter cet obstacle ? Une solution de contournement est apparue comme une solution viable : l'introduction d'une méthode de fabrique statique qui accepte la classe souhaitée comme paramètre.

public class MyGenericClass<T> {

  private final Class<T> clazz;

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

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

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

Cette approche vous permet de spécifier explicitement la classe générique lors de la création de l'objet, en contournant efficacement l'effacement à l'exécution. problème. Cependant, cela présente un inconvénient : cela ajoute du code passe-partout et complique légèrement l'API. Cela reste néanmoins une solution de contournement efficace lorsque la détermination du type de classe est indispensable.

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 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