Maison  >  Article  >  Java  >  Réflexion en JAVA

Réflexion en JAVA

WBOY
WBOYoriginal
2024-08-30 15:57:54869parcourir

Reflection, comme son nom l'indique, est une fonctionnalité API (Application Programming Interface) en JAVA via laquelle l'instance d'exécution de la classe peut être entièrement examinée. Il fait partie du package Java.lang.reflect. Ce package doit être importé au démarrage du programme, puis les fonctions sont invoquées pour comprendre la fonctionnalité de « réflexion ». Le comportement de n’importe quelle classe peut être étudié ; les métadonnées peuvent être extraites ou modifiées à l'aide de l'API de réflexion lors de l'exécution.

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Syntaxe

La syntaxe des fonctions courantes sous API de réflexion pour extraire les informations de classe est fournie ci-dessous :

  • public String getName( paramètre ): Cette fonction renvoie le nom de la classe.
  • public boolean isInterface( paramètre ): Cette fonction vérifie si la classe est une interface ou non et renvoie une valeur booléenne (vrai ou faux).
  • public boolean isArray( paramètre ): Cette fonction vérifie si la variable est un tableau ou non et renvoie une valeur booléenne (vrai ou faux).
  • public Constructor[] getDeclaredConstructors( paramètre ) lance SecurityException : Cette fonction vérifie les constructeurs de la classe et renvoie le nombre de constructeurs utilisés dans une classe particulière. De plus, il comporte une exception de sécurité et des captures associées au fonctionnement du programme sans interruption.
  • public Method[] getDeclaredMethods( paramètre ) lance SecurityException : Cette fonction vérifie les méthodes de la classe et renvoie le nombre de méthodes utilisées dans une classe particulière. De plus, il dispose d'une exception de sécurité et de captures associées pour que le programme fonctionne sans problème.
  • public Class getSuperclass( paramètre ): Cette fonction renvoie la superclasse de la classe de base.
  • public boolean est primitif (paramètre) : Cette fonction vérifie si le paramètre donné est primitif ou non et renvoie une valeur booléenne.

Comment fonctionne la réflexion en JAVA ?

La classe de réflexion utilise différentes méthodes définies dans le package Java.lang.reflect pour extraire les informations de classe. Les informations sur la classe peuvent être extraites à l'aide de la méthode getClass(), les constructeurs utilisant la méthode getConstructors() et les méthodes utilisant la méthode getMethods(). Ces méthodes sont définies dans l'API de réflexion mais renvoient les informations de la classe, notamment les méthodes, les constructeurs, etc. L'API Reflection est utilisée dans les programmes JAVA, les IDE (environnement de développement intégré) comme Eclipse, Netbeans. Cela peut être bien compris à l'aide des exemples fournis dans la section ci-dessous.

Exemples de réflexion en JAVA

Différents exemples sont mentionnés ci-dessous :

Exemple n°1

Code :

//package test;
import java.lang.Class;
public class test{
public static void main(String args[]){
Class<Boolean> c1 = boolean.class;
System.out.println("Here, the class name is: "+c1.getName());
Class<test> c2 = test.class;
System.out.println("This is another instance of class is used to derive class name : "+c2.getName());
}
}

Sortie :

Réflexion en JAVA

Explication : Veuillez vérifier l'exemple fourni ci-dessus. Il contient un package qui contient toutes les classes nommées « test ». Le package de test a une classe « test déclaré ». Cette classe contient également la méthode principale à partir de laquelle démarrera l’exécution du programme. La classe « Classe est la classe de réflexion d'identifiant dans jAVA. Cette classe est activée à l'aide de la bibliothèque déclarée ci-dessus « java.lang.Class ». Boolean lui-même est une classe en JAVA. Booléen est un type de données primitif comme une chaîne, un int ou un char. Cet exemple montre que nous pouvons extraire les informations des types de données primitifs (qui sont en fin de compte la classe en JAVA, et c'est la raison pour laquelle JAVA est appelé un langage purement orienté objet). La fonction « getName() » est utilisée pour obtenir le nom. d'une classe qui est ici instanciée par un objet nommé « C1 ».

Dans la ligne suivante, plutôt que d'utiliser un type de données primitif, une « classe » de type de données définie par l'utilisateur nommée « test » est prise en compte pour extraire les données. "Classe" est une classe de réflexion instanciée avec un objet nommé « C2 ». Ici, le nom de la classe est testé et l'objet est utilisé pour extraire le nom de cette classe à l'aide de la fonction « getName() ». La sortie finale contient la valeur renvoyée par ces fonctions et est affichée sur l'écran de sortie.

Exemple n°2

Code :

//package test;
import java.lang.Class;
class Simple{}
public class test{
public static void main(String args[]){
try{
Class<?> c=Class.<em>forName</em>("Simple");
System.<em>out</em>.println("The result is: "+c.isInterface());
}catch(Exception e){System.<em>out</em>.println(e);}
}
}

Sortie :

Réflexion en JAVA

Explication : Dans l'exemple ci-dessus, un package est créé nommé « test », comme créé dans l'exemple précédent numéro 1. Ce package contient un nom de classe « Simple », qui n'est pas la classe principale. . La classe principale ici est la classe « test » qui contient la méthode principale à partir de laquelle démarrera l’exécution du programme. La « classe » est un identifiant de classe de réflexion qui a été instancié via un objet nommé ici « c ». Ensuite, cet objet est utilisé pour extraire l'indicateur de décision (Vrai ou faux) de la fonction nommée « isInaterface ». Cette fonction extrait une classe en tant que paramètre ; dans ce cas, la classe qui a été extraite en tant que paramètre était la classe « Simple ». Cette classe n'est pas une interface, donc le « false » est renvoyé en conséquence dans l'écran de sortie. Pour invoquer cette fonction, l'objet de classe « c » a été utilisé.

Avantages

Certains des avantages de l'utilisation de la réflexion en JAVA sont répertoriés ci-dessous :

  1. C'est l'un des meilleurs moyens d'extraire des informations pour n'importe quelle classe. Ces informations peuvent consister en des informations allant des constructeurs à la classe et aux méthodes.
  2. L'un des plus grands avantages de cette fonctionnalité est que nous pouvons également extraire des informations sur les méthodes et classes privées. Ainsi, tout ce qui est caché dans le programme avec de mauvaises intentions peut être extrait à l'aide de cette fonctionnalité.
  3. Cette fonctionnalité offre beaucoup de flexibilité aux débogueurs car ils peuvent déboguer facilement les classes plutôt que d'accéder à chaque classe séparément.
  4. Cela ajoute également une fonctionnalité d'extensibilité permettant d'ajouter des classes personnalisées externes à l'aide d'instances.
  5. Cela fournit une manifestation de la puissance réelle du langage POO à l'aide d'instances.
  6. Ceci est utilisé dans le chargement et le rechargement dynamiques des classes lors de l'exécution d'un programme.

Conclusion

La réflexion JAVA permet d'introspecter les classes, les interfaces, les méthodes, etc. sans connaître du tout le nom de la classe. Tout cela se fait au moment de la compilation. Ceci est considéré comme l'une des propriétés les plus puissantes de JAVA car elle peut être utilisée pour créer des instances de la classe, et les membres privés de la classe peuvent être extraits à l'aide de celle-ci. Les développeurs peuvent également l'utiliser pendant l'exécution et pour le mappage d'objets de base de données.

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
Article précédent:Cours graphique en JavaArticle suivant:Cours graphique en Java