Java Reflection Learning <BR>La soi-disant réflexion peut être comprise comme l'opération consistant à obtenir des informations sur le type d'objet pendant l'exécution. Les méthodes de programmation traditionnelles exigent que les programmeurs décident des types à utiliser au stade de la compilation, mais avec l'aide de la réflexion, les programmeurs peuvent obtenir ces informations de manière dynamique et écrire du code plus portable. À proprement parler, la réflexion n'est pas une caractéristique d'un langage de programmation, car le mécanisme de réflexion peut être implémenté dans n'importe quel langage, mais si le langage de programmation lui-même prend en charge la réflexion, la mise en œuvre de la réflexion sera alors beaucoup plus pratique.
1. Obtenir la classe de type <BR>Nous savons que tout en Java est un objet, et les objets que nous utilisons généralement héritent directement ou indirectement de la classe Object. La classe Object contient une méthode appelée getClass, qui peut être utilisée pour obtenir la classe de type d'une instance. Une classe de types fait référence à une classe qui représente un type, car tout est un objet et les types ne font pas exception. En Java, une classe de types est utilisée pour représenter un type. Toutes les classes de types sont des instances de la classe Class. Par exemple, voici le morceau de code suivant :
A a = nouveau A();
si(a.getClass()==A.class)
System.out.println("égal");
else System.out.println("inégal");
Le résultat est imprimé « égal ».
On peut voir que l'objet a est une instance de A, une certaine classe de A. Le résultat renvoyé en utilisant a.getClass() dans l'instruction if est exactement la classe de type de A. Pour exprimer un type spécifique de classe de type dans Java, vous pouvez utiliser la méthode " Type.class", car a.getClass() obtient la classe de type de A, qui est A.class, donc le résultat de l'exécution du code ci-dessus est d'imprimer "égal". Une remarque particulière est que les classes de types ont une correspondance biunivoque. La classe de type de la classe parent et la classe de type de la sous-classe sont différentes. Par conséquent, en supposant que A est une sous-classe de B, le code suivant obtiendra la sortie de. "inégal":
A a = nouveau A();
si(a.getClass()==B.class)
System.out.println("égal");
else System.out.println("inégal");
Ainsi, si vous connaissez une instance, vous pouvez obtenir la classe de type de cet objet en utilisant la méthode "getClass()" de l'instance, et si vous connaissez un type, vous pouvez obtenir la classe de type de ce type en utilisant la méthode ".class". .
2. Obtenir les informations de type <BR>Après avoir obtenu la classe de type, vous pouvez appeler certaines méthodes pour obtenir des informations de type. Les principales méthodes sont :
getName():String : récupère le nom complet du type.
getSuperClass():Class : récupère la classe parent directe de ce type. Si le type n'a pas de classe parent directe, renvoie null.
getInterfaces():Class[] : récupère toutes les interfaces implémentées par ce type.
isArray():boolean : Détermine si le type est un tableau.
isEnum():boolean : Détermine si le type est un type énumération.
isInterface():boolean : Détermine si le type est une interface.
isPrimitive():boolean : Détermine si le type est un type de base, c'est-à-dire s'il est int, booléen, double, etc.
isAssignableFrom(Class cls):boolean : Déterminez si ce type est la classe parent (ancêtre) ou l'interface parent (ancêtre) de type cls.
getComponentType():Class : si le type est un tableau, renvoie le type de composant du tableau.
De plus, des opérations telles que la conversion de type peuvent également être effectuées. Les principales méthodes sont :
asSubclass(Class clazz):Class : modifier ce type