Le mécanisme de réflexion Java permet aux programmes de modifier dynamiquement le comportement des classes sans modifier le code source. En exploitant l'objet Class, vous pouvez créer des instances via newInstance(), modifier les valeurs des champs privés, appeler des méthodes privées, etc. La réflexion doit toutefois être utilisée avec prudence, car elle peut entraîner un comportement inattendu et des problèmes de sécurité, et entraîner une surcharge en termes de performances.
Mécanisme de réflexion Java : modifier le comportement d'une classe
Introduction
Le mécanisme de réflexion Java permet aux programmes d'accéder et de manipuler la structure et le comportement d'une classe. Cela peut être utilisé pour modifier dynamiquement le comportement d'une classe sans modifier son code source.
Concept
Le mécanisme de réflexion crée des instances de classes via la méthode Class
对象来操作类。Class
对象提供了对类的方法、字段和注释的访问权限。我们可以使用 newInstance()
.
Cas pratique : modifier dynamiquement les valeurs des champs
Voici un exemple d'utilisation de la réflexion pour modifier les valeurs des champs :
public class Person { private String name; private int age; } public class Main { public static void main(String[] args) throws Exception { // 创建 Person 类的实例 Class<?> personClass = Class.forName("Person"); Object person = personClass.newInstance(); // 使用反射获取 name 字段 Field nameField = personClass.getDeclaredField("name"); nameField.setAccessible(true); // 设置为可访问,因为该字段是私有的 // 设置 name 字段的值 nameField.set(person, "John Doe"); // 打印修改后的值 System.out.println(nameField.get(person)); // 输出:John Doe } }
Cas pratique : appeler des méthodes privées
On peut aussi utiliser la réflexion pour appeler des méthodes privées :
public class Person { private void doSomething() { ... } } public class Main { public static void main(String[] args) throws Exception { // 创建 Person 类的实例 Class<?> personClass = Class.forName("Person"); Object person = personClass.newInstance(); // 使用反射获取 doSomething() 方法 Method doSomethingMethod = personClass.getDeclaredMethod("doSomething"); doSomethingMethod.setAccessible(true); // 设置为可访问,因为该方法是私有的 // 调用 doSomething() 方法 doSomethingMethod.invoke(person); } }
Notes
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!