Maison >Java >javaDidacticiel >Réflexion basée sur Java

Réflexion basée sur Java

yulia
yuliaoriginal
2018-09-10 16:33:591122parcourir

Comment créer un objet de classe ? Il existe deux manières :
class.forName("class name");
Class a = a.class;
La différence entre les deux est : forName() vous aidera à initialiser les variables statiques ; La classe a = a.class doit initialiser les variables statiques par elle-même ; la réflexion, le proxy dynamique ; par la réflexion, vous pouvez implémenter la méthode d'obtention de la classe, c'est-à-dire la méthode de l'objet, elle peut être modifiée ; un objet; nstanceof peut déterminer une certaine Si une classe appartient à une autre classe est utilisée pour déterminer quand la transformation vers le bas;

Grâce à l'objet de classe, vous pouvez obtenir : des constructeurs, des variables membres, des méthodes membres et des membres d'accès de une certaine classe ;

Obtenez les constructeurs :
class.getConstructors(); Obtenez les constructeurs publics
class.getDeclaredConstructors(); >class. getConstructor(null); Obtenez le constructeur public sans paramètre ;
Ces méthodes renvoient un Constructor con; l'objet de classe du constructeur peut être créé via con.newInstance("passage de paramètre") ;
 

Obtenir les variables membres : class.getFields(); Obtenir tous les champs publics
class.getDeclaredFields(); "name"); Obtenir un certain champ public spécifique (name);
class.getDeclaredField("phoneNum"); Obtenir un certain champ privé phoneNum
Return Field; .set(obj, "Andy Lau"); parmi eux, notre obj est un objet généré par notre classe


Méthode membre Get :
class.getMethods(); toutes les méthodes publiques; class.getDeclaredMethods();Obtenir toutes les méthodes;
class.getMethod("Nom de la méthode", String.class); ;
renvoie un objet Method ; alors ce que nous devons faire est comme un Field, générer d'abord un objet ; m.invoke(obj,20);
peut même refléter directement notre méthode main() ; class.getMethod("main", Stirng[].class); pour implémenter la réflexion, créer de nouvelles classes et exécuter des méthodes ; utiliser la réflexion pour éviter les vérifications génériques : nous pouvons même appeler le fichier de classe d'un certain conteneur, puis appeler sa méthode pour éviter le problème de la vérification générique ; De plus, nous pouvons également implémenter le mode proxy dynamique par réflexion :

Un ProxyHandler est utilisé parmi eux, implémenté depuis l'interface InvocationHandler, obtient un objet proxy en passant un objet réel Les paramètres requis. sont : tar.getClass().getClassLoader() le chargeur de classe de l'objet réel, tar.getClass().getInterfaces() L'interface de l'objet réel, ainsi que celui-ci et l'InvocationHandler lui-même, obtiennent un objet proxy via le mécanisme de réflexion, et en même temps écrivez notre objet réel dans la fonction d'exécution de méthode de cet objet proxy pour l'exécution. Afin d'appeler d'abord la méthode de notre objet réel lors des appels de méthode suivants ; n'oubliez pas de convertir l'objet en objet réel lors de l'appel de la liaison de l'objet proxy.

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