Cet article analyse le mécanisme de réflexion Java dans un exemple. Partagez-le pour votre référence, comme suit:
Réflexion, je les ai souvent entendus dire que j'avais lu des matériaux et que je les aurait utilisés dans le modèle de conception, mais je sentais que je n'en avait pas une compréhension plus profonde.
1. Jetons un coup d'œil au concept de réflexion:
Il se réfère principalement à une capacité à laquelle un programme peut accéder, détecter et modifier son propre état ou comportement, et peut ajuster ou modifier l'état et la sémantique connexe de l'application décrite par comportement en fonction de l'état et des résultats de son propre comportement.
La réflexion est un outil puissant de Java qui nous permet de créer facilement du code flexible qui peut être assemblé lors de l'exécution sans avoir à lier le code source entre les composants. Mais une mauvaise utilisation de la réflexion sera très coûteuse!
Il est étourdi de voir le concept, de continuer à lire.
2. Le rôle du mécanisme de réflexion:
1. Décompilation: .class ->. Java
2. Accédez aux propriétés, méthodes, constructeurs, etc. des objets Java par le mécanisme de réflexion;
Cela semble plus facile à comprendre.
3. Voyons d'abord les classes que le soleil nous fournit le mécanisme de réflexion:
java.lang.class; java.lang.reflect.constructor; java.lang.reflect.field; java.lang.reflect.method; java.lang.reflect.modificier;
Nous pouvons interroger de nombreuses méthodes, attributs et autres opérations en réflexion à partir de ces quatre classes. Ou avez-vous besoin d'apprendre à interroger constamment l'API?
4. Implémentation de fonctions spécifiques:
1. Il existe trois façons d'obtenir la classe par mécanisme de réflexion.
// La première méthode: classc1 = class.forname ("employée"); L'objet dans la langue Java a une méthode GetClass Employee = New Employee ();2. Créer un objet: Après avoir obtenu la classe, nous créerons son objet et utiliserons NewInstance:
Class C = class.forname ("Employee"); // Créer une nouvelle instance de la classe représentée par cette classe ObjectO Objecto = C.NewInstance ();3. Obtenez des attributs: divisés en tous les attributs et attributs spécifiés:
①.
// Obtenez la classe entière C = class.forname ("java.lang.integer"); // obtenir tous les attributs? Fiel L'attribut stringbuffer sb = new StringBuffer (); // divise chaque attribut en cette chaîne par méthode en ajout ) + "{/ n"); // chaque propriété à l'intérieur pour (champ de champ: fs) {sb.append ("/ t"); // espace sb.append (modificateur .toString (field.getModifiers ()) + ""); // Obtenez les modificateurs de l'attribut, tels que public, statique, etc. sb.append (field.getType (). GetImpLename () + ""); // Obtenez le nom de type de l'attribut SB.APPEND ( field.getName () + "; / n"); // Nom de la propriété + Entrée} sb.append ("}"); System.out.println (SB);②.
public static void main (String [] args) lance l'exception {<span style = "white-space: pre"> </ span> // façons précédentes: / * utilisateur u = new user (); // Définit System.out.println (U.Age); ); // Attribuez la valeur "110" à l'attribut ID de l'objet o idf.set (o, "110");4. Obtenez des méthodes et des méthodes de construction, ne décrivez plus en détail, regardez simplement les mots clés:
Méthode Mots-clés
signification
getDeclaredMethods ()
Obtenez toutes les méthodes
getReturnType ()
Obtenez le type de méthode de retour
getParameterTypes ()
Obtenez le type de paramètre entrant de la méthode
getDeclaredMethod ("Nom de la méthode", paramètre type.class, ...)
Obtenez une méthode spécifique
Mots-clés du constructeur
signification
getDeclaredConstructors ()
Obtenez tous les constructeurs
GetDeclaredConstructor (Type de paramètre.classe, ...)
Obtenez un constructeur spécifique
Classe parent et interface parentale
signification
getSuperclass ()
Obtenez la classe des parents d'une certaine classe
getInterfaces ()
Obtenir une interface pour un certain type d'implémentation
De cette façon, nous pouvons obtenir divers contenus de la classe et le décompiler. Pour une langue comme Java qui se compile d'abord, puis s'exécute, le mécanisme de réflexion peut rendre le code plus flexible et plus facile à implémenter.
5. Reflection Plus Files de configuration rend notre programme plus flexible:
Dans l'étude des modèles de conception, lors de l'apprentissage des usines abstraites, la réflexion est utilisée pour lire plus facilement les chaînes de liaison de la base de données, etc., donc je ne la comprenais pas beaucoup à ce moment-là, donc je l'ai copiée en conséquence. Jetez un œil à l'utilisation des fichiers de réflexion + de configuration dans .NET:
Le fichier de configuration utilisé à ce moment était un fichier app.config, et le contenu était au format XML, et le contenu de la base de données liés a été rempli:
<FIFIGIGURATION> <PPETSETtings> <ajouter key = "" value = "" /> </ppSettings> </FIGIGRURATION>
Comment écrire la réflexion:
assembly.load ("Le nom de l'assemblage actuel"). CreateInstance ("Le nom de l'espace de noms actuel". Le nom de classe à instanciation);
Cet avantage est qu'il est facile de nous faciliter la transformation de la base de données. Pour le sélectionner.
Bien sûr, il en va de même dans Java, sauf que le fichier de configuration ici est .properties, appelé le fichier de propriété. Lisez le contenu dedans par réflexion. De cette façon, le code est corrigé, mais nous pouvons modifier le contenu du fichier de configuration, ce qui rend notre code beaucoup plus flexible!
Pour résumer, l'apprentissage de la réflexion Java et l'utiliser de manière flexible peuvent rendre notre code plus flexible, mais il a également ses inconvénients, c'est-à-dire que l'utiliser réduira les performances de notre logiciel et augmentera la complexité, nous devons donc également l'utiliser soigneusement.
J'espère que cet article sera utile à la programmation Java de tous.