Maison  >  Article  >  Java  >  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
Patricia Arquetteoriginal
2024-11-15 22:18:02138parcourir

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);
  }
}

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();
  }
}

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