Principes de base et méthodes d'appel de la réflexion Java
Avant-propos :
La réflexion Java est une fonctionnalité importante du langage Java, qui permet aux programmes d'obtenir dynamiquement des informations sur la classe et d'exploiter les membres de la classe au moment de l'exécution. Grâce à la réflexion, nous pouvons créer dynamiquement des objets, appeler des méthodes, obtenir/définir des propriétés, etc. au moment de l'exécution, ce qui améliore considérablement la flexibilité et l'évolutivité du programme. Cet article présentera les principes de base de la réflexion Java et donnera des exemples de code spécifiques.
1. Principes de base de la réflexion
L'implémentation de la réflexion Java est basée sur la classe Class, qui est la classe principale de la réflexion Java. Chaque classe Java générera un objet Class correspondant après la compilation. Les informations de classe peuvent être obtenues via l'objet Class et les opérations de classe peuvent être effectuées via les informations de classe.
La réflexion Java comprend principalement les classes et interfaces de base suivantes :
Le principe de base de la réflexion Java est le suivant : d'abord, obtenir l'objet Class correspondant via le nom complet de la classe ou la méthode getClass() de l'objet puis, via certaines méthodes de la classe Class, telles que ; getFields(), getMethods(), etc. Obtenez un champ, une méthode, un constructeur et d'autres objets ; enfin, effectuez des opérations spécifiques via ces objets, telles que l'obtention/définition de valeurs d'attribut, l'appel de méthodes, la création d'objets, etc.
2. Méthode d'appel de réflexion
2.1 Obtenir un objet Class
L'objet Class correspondant peut être obtenu via le nom complet de la classe ou la méthode getClass() de l'objet.
L'exemple de code est le suivant :
// 通过类的全限定名获取Class对象 Class<?> clazz1 = Class.forName("com.example.User"); // 通过对象的getClass()方法获取Class对象 User user = new User(); Class<?> clazz2 = user.getClass();
2.2 Obtention des valeurs d'attribut
La valeur d'attribut d'un objet peut être obtenue via la méthode get() de la classe Field.
L'exemple de code est le suivant :
// 获取public属性值 Field field = clazz.getDeclaredField("name"); String name = (String) field.get(user); // 获取private属性值 Field privateField = clazz.getDeclaredField("age"); privateField.setAccessible(true); // 设置private属性的访问权限 int age = (int) privateField.get(user);
2.3 Définition des valeurs d'attribut
La valeur d'attribut d'un objet peut être définie via la méthode set() de la classe Field.
L'exemple de code est le suivant :
// 设置public属性值 Field field = clazz.getDeclaredField("name"); field.set(user, "Tom"); // 设置private属性值 Field privateField = clazz.getDeclaredField("age"); privateField.setAccessible(true); // 设置private属性的访问权限 privateField.set(user, 20);
2.4 Appel de méthodes
La méthode d'un objet peut être appelée via la méthode Invocation() de la classe Method.
L'exemple de code est le suivant :
// 调用无参方法 Method method1 = clazz.getDeclaredMethod("sayHello"); method1.invoke(user); // 调用带参方法 Method method2 = clazz.getDeclaredMethod("sayHi", String.class); method2.invoke(user, "Jack");
2.5 Création d'objets
Les objets peuvent être créés via la méthode newInstance() de la classe Constructor.
L'exemple de code est le suivant :
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, int.class); User newUser = (User) constructor.newInstance("Lucy", 25);
Résumé :
La réflexion Java est une fonctionnalité puissante du langage Java, qui peut obtenir dynamiquement des informations sur la classe et faire fonctionner les membres de la classe au moment de l'exécution. Le principe de base de la réflexion est d'obtenir des informations sur la classe via la classe Class et d'effectuer des opérations spécifiques via Field, Method, Constructor et d'autres objets. Dans les applications réelles, nous pouvons utiliser le mécanisme de réflexion pour réaliser diverses exigences dynamiques et améliorer la flexibilité et l'évolutivité du programme.
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!