En programmation orientée objet, déterminer la classe d'un type générique est souvent nécessaire. Cependant, lors de l'utilisation de classes génériques, cette tâche devient difficile en raison de l'effacement du type au moment de l'exécution.
Considérez l'exemple suivant dans lequel MyGenericClass tente de créer une instance de type T à l'aide d'une bibliothèque tierce :
public class MyGenericClass<T> { public void doSomething() { // Create an instance of class T T bean = (T)someObject.create(T.class); } }
Cette approche échoue avec une erreur « Littéral de classe illégal pour le paramètre de type T ». Pour résoudre ce problème, une solution de contournement courante consiste à transmettre le type T en tant que paramètre à une méthode statique :
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<U>(clazz); } protected MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { // Create an instance of class T T instance = clazz.newInstance(); } }
En passant explicitement la classe T, le code peut créer avec succès une instance du type souhaité. Bien que cette méthode ne soit pas aussi élégante qu'un appel de méthode direct, elle fournit une solution fiable pour déterminer la classe d'un type générique.
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!