MENU

La réflexion Java simplifiée

table des matières

La réflexion Java simplifiée

JavaderéflexionPrésentation d'une classe utilitaire qui vous permet d'utiliser facilement l'API.

Qu'est-ce que la réflexion ?

API de réflexiondents,"java.lang.reflect» inclus dans le forfait,
Il s'agit d'une API qui récupère des informations telles que les champs et les méthodes des classes Java.
Les classes suivantes sont principalement utilisées.

  • java.lang.Class
  • java.lang.reflect.Constructeur
  • java.lang.reflect.Méthode
  • java.lang.reflect.Field

réflexionEn utilisant , vous pouvez créer des classes ou appeler des méthodes sans avoir à les coder directement.
Vous pouvez créer une instance de classe à partir d'une chaîne ou exécuter une méthode.

En écrivant les définitions des noms de classe et des noms de méthodes dans des fichiers externes tels que XML, vous pouvez adapter dynamiquement l'application aux changements de l'environnement pendant l'exécution.
C'est également une API très efficace pour créer des applications très flexibles.


Objectif de la réflexion

réflexionn'est pas souvent utilisé directement par les utilisateurs,
Il est largement utilisé dans les applications Web telles que Struts et les frameworks tels que le mappage O/R.

Par exemple, lors de la définition automatique des données d'entrée de l'écran Web sur les propriétés JavaBeans,
Il est utilisé lors de l'émission de SQL qui se met automatiquement à jour en fonction des propriétés JavaBeans.

De plus, des fonctions telles que le chargement et l'enregistrement dynamiques de plug-ins qui étendent les fonctionnalités au démarrage de l'application sont disponibles.réflexionCeci peut être facilement réalisé en utilisant .

Exécution de l'échantillon

Veuillez exécuter l'exemple et expérimenter une programmation de type framework.

Ici, nous utilisons la classe suivanteréflexionMontre une utilisation simple de l’utilitaire.

Main.java...Classe à exécuter
BeanUtil.java...Classe utilitaire de réflexion
FreeSoft.java...Utilisé comme réflexion dans une classe qui représente le logiciel libre.

●Lorsqu'il est exécuté normalement

System.out.println(« >>>Cas normal »);
FreeSoft freeSoft = nouveau FreeSoft();
freeSoft.setName(« Chat&Messenger Chat et Messenger !! »);
freeSoft.showName();
freeSoft.showPrice(0);

●Lorsqu'il est exécuté en utilisant la réflexion

System.out.println(« >>>Lors de l'utilisation de la réflexion »);
//Créer une instance de la classe FreeSoft
Objet InvocationObject = BeanUtil.newInstance(« Logiciel Libre »);
//Définissez la valeur dans le champ de nom.
BeanUtil.setProperty(invokeObject, "nom" , "Chat&Messenger Chat et Messenger !!");
// Exécute la méthode showName() de FreeSoft.
BeanUtil.invoke(invokeObject, "showName", nul);
// Exécute la méthode showPrice() de FreeSoft.
// Si la méthode a des arguments, ils doivent être passés sous forme de tableau de type Objet.
BeanUtil.invoke(invokeObject, « afficher le prix »,nouvel Objet[]{nouvel Entier(0)});

●Résultats d'exécution

Les résultats d'exécution sont les mêmes que ce soit dans le cas normal ou lors de l'utilisation de la réflexion.

>>> Cas normal

Nom du logiciel : Chat&Messenger Chat et messagerie ! !

Prix : 0 yen

>>> Lors de l'utilisation de la réflexion

Nom du logiciel : Chat&Messenger Chat et messagerie ! !

Prix : 0 yen

Détails de la méthode BeanUtil

nouvelleInstance

objet statique public nouvelleInstance(String className) lève une exception
Génère et renvoie une instance à partir de la chaîne "className".

Paramètres:
nom du cours – Nom de classe complet
Valeur de retour :
Une nouvelle instance d'un nom de classe complet
exception:
Exception

nouvelleInstance

objet statique public nouvelleInstance(String className, Object[] argObj) lève une exception
Génère et renvoie une instance à partir de la chaîne "className".

Paramètres:
nom du cours – Nom de classe complet
argObj – Arguments du constructeur
Valeur de retour :
Une nouvelle instance d'un nom de classe complet
exception:
Exception

nouvelleInstance

objet statique public nouvelleInstance(Classe Clazz) lève une exception
Génère et renvoie une instance de la classe "clazz".

Paramètres:
clazz - classe
Valeur de retour :
nouvelle instance de clazz
exception:
Exception

nouvelleInstance

objet statique public nouvelleInstance(Classe clazz, Object[] argObj) lève une exception
Génère et renvoie une instance de la classe "clazz".

Paramètres:
clazz - classe
argObj – Arguments du constructeur
Valeur de retour :
nouvelle instance de clazz
exception:
Exception

setProperty

Vide public statique setProperty(Object InvokeObject, String fieldName, Object value) lève une exception
Appelez la méthode setter du champ "fieldName" de l'objet "invokeObject" et stockez la valeur "value".

S'il n'y a pas de méthode de définition, la valeur sera définie directement sur le champ. Cependant, dans ce cas, le modificateur d'accès de la propriété cible doit être public.

Paramètres:
invoquerObjet – Objet à exécuter
nom de domaine – Nom de la propriété de l’objet à exécuter
valeur – Valeur à définir
exception:
Exception – L'exception suivante se produit.
InvocationTargetExceptionInvocationTargetException – Si la méthode sous-jacente lève une exception
Exception d'accès illégal – Cet objet méthode est Java
Lorsque le contrôle d'accès à la langue est implémenté et que la méthode sous-jacente n'est pas accessible
NoSuchMethodException – Si une méthode portant le nom spécifié n'est pas trouvée

obtenirPropriété

objet statique public obtenirPropriété(Object EnsureObject, String fieldName) lève une exception
Appelle la méthode getter du champ fieldName de l'objet EnsureObject pour obtenir la valeur.
S'il n'y a pas de méthode getter, la valeur sera récupérée directement du champ. Cependant, dans ce cas, le modificateur d'accès de la propriété cible doit être public.

Paramètres:
invoquerObjet – Objet à exécuter
nom de domaine – Nom de la propriété de l’objet à exécuter
Valeur de retour :
Valeur de retour de la méthode Getter
exception:
Exception – L'exception suivante se produit.
InvocationTargetExceptionInvocationTargetException – Si la méthode sous-jacente lève une exception
Exception d'accès illégal – Cet objet méthode est Java
Lorsque le contrôle d'accès à la langue est implémenté et que la méthode sous-jacente n'est pas accessible
NoSuchFieldException – Si un champ portant le nom spécifié n'est pas trouvé

invoquer

objet statique public invoquer(Object InvokeObject, String callMethod, Object[] argObjects) lève InvocationTargetException, IllegalAccessException, NoSuchMethodException
Exécute la méthode "callMethod" de l'objet "invokeObject".
S'il existe une valeur de retour, elle peut être obtenue sous forme d'objet.

Paramètres:
invoquerObjet – Objet à exécuter
méthode d'appel – Nom de la méthode à exécuter
Objetsarg – S'il y a des arguments, transmettez-les sous forme de tableau d'objets. S'il n'y a aucun argument, transmettez null.
Valeur de retour :
Valeur de retour de l'exécution de "callMethod"
exception:
InvocationTargetExceptionInvocationTargetException – Si la méthode sous-jacente lève une exception
Exception d'accès illégal – Cet objet méthode est Java
Lorsque le contrôle d'accès à la langue est implémenté et que la méthode sous-jacente n'est pas accessible
NoSuchMethodException – Si une méthode portant le nom spécifié n'est pas trouvée

méthode de recherche

méthode statique publique méthode de recherche(Object InvokeObject, String callMethod, Object[] argObjects) lève NoSuchMethodException
Recherchez la méthode 'callMethod' de l'objet 'invokeObject'.

Paramètres:
invoquerObjet – Objet à exécuter
méthode d'appel – Nom de la méthode de l’objet à exécuter
Objetsarg – S'il y a des arguments, transmettez-les sous forme de tableau d'objets. S'il n'y a aucun argument, transmettez null.
Valeur de retour :
Un objet Method qui correspond aux conditions d'argument spécifiées
exception:
NoSuchMethodException – Si aucune méthode de correspondance n’est trouvée, ou si le nom est « » ou « »

setField

Vide public statique setField(Object EnsureObject, String fieldName, Object value) lève IllegalAccessException, NoSuchFieldException
Stocke la valeur "value" dans le nom de champ "fieldName" de l'objet à exécuter "invokeObject".

Paramètres:
invoquerObjet – Objet à exécuter
nom de domaine – Nom du champ de l’objet à exécuter
valeur – Valeur à définir
exception:
Exception d'accès illégal – Le champ sur lequel l'objet spécifié est basé (ou sa sous-classe ou son implémenteur)
n'est pas une instance de la classe ou de l'interface qu'il déclare, ou si la conversion de déballage échoue
NoSuchFieldException – Si un champ portant le nom spécifié n'est pas trouvé

obtenirField

objet statique public obtenirField(Object InvokeObject, String fieldName) lève IllegalAccessException, NoSuchFieldException
Obtient la valeur du nom de champ "fieldName" de l'objet à exécuter "invokeObject".

Paramètres:
invoquerObjet – Objet à exécuter
nom de domaine – Nom du champ de l’objet à exécuter
Valeur de retour :
valeur de retour
exception:
Exception d'accès illégal – Le champ sur lequel l'objet spécifié est basé (ou sa sous-classe ou son implémenteur)
n'est pas une instance de la classe ou de l'interface qu'il déclare, ou si la conversion de déballage échoue
NoSuchFieldException – Si un champ portant le nom spécifié n'est pas trouvé

hasField

booléen statique public hasField(Objet Objet, String fieldName) lève une exception
Vérifie si l'objet 'object' déclare le nom du champ 'fieldName'.

Paramètres:
objet – Objet à inspecter
nom de domaine – Nom du champ à vérifier
Valeur de retour :
vrai si déclaré
exception:
Exception

getAllFields

public statique java.util.TreeSet getAllFields(Objet objet) lève une exception
Paramètres:
objet
Valeur de retour :
exception:
Exception

getShortClassName

Chaîne statique publique getShortClassName(Objet Objet)
Obtient le nom de classe non qualifié d'un objet.

Paramètres:
objet
Valeur de retour :

getShortClassName

Chaîne statique publique getShortClassName(Nom de classe de chaîne)
Obtient le nom de classe à partir du nom complet.

Paramètres:
nom du cours
Valeur de retour :

getFieldName

Chaîne statique publique getFieldName(Nom de la méthode de chaîne)
Modifiez le nom du champ à partir du nom de la méthode. Doit être conforme aux conventions JavaBeans.

Paramètres:
NomMéthode
Valeur de retour :

estClassExist

booléen statique public estClassExist(Nom de classe de chaîne)
Vérifie que le nom complet « className » est un nom de classe existant.

Paramètres:
nom du cours
Valeur de retour :

getPropertyDescriptors

Descripteur de propriété statique public[] getPropertyDescriptors(Objet objet) lance IntrospectionException
Renvoie un PropertyDescriptor qui contient des informations sur l'objet pour « objet ».

Paramètres:
objet
Valeur de retour :
exception:
java.beans.IntrospectionException

Code source de BeanUtil

  • URLをコピーしました!
table des matières