La capacité d'obtenir et de manipuler dynamiquement des éléments tels que des classes, des méthodes, des propriétés, etc. pendant l'exécution d'un programme Java est appelé réflexion Java. Cela nous permet d'obtenir des informations sur une classe et d'opérer dessus pendant que le programme est en cours d'exécution, ce qui augmente considérablement la flexibilité et l'évolutivité du langage Java.
En Java, chaque classe a un objet Class correspondant, et la réflexion utilise cet objet Class pour obtenir et exploiter les informations de classe.
En Java, il existe trois façons d'obtenir un objet de classe :
C'est le moyen le plus courant, en utilisant la méthode Class.forName() pour obtenir l'objet Class. Par exemple :
Class<?> clazz = Class.forName("com.example.MyClass");
Vous pouvez obtenir l'objet Class auquel il appartient via la méthode getClass() de l'objet. Par exemple :
MyClass obj = new MyClass(); Class<?> clazz = obj.getClass();
Utilisez une constante littérale de classe pour obtenir un objet de classe, par exemple :
Class<?> clazz = MyClass.class;
En obtenant l'objet Class, nous pouvons obtenir diverses informations sur la classe, telles que le nom de la classe, la classe héritée, l'interface implémentée, le constructeur, les méthodes et les champs, etc. Ce qui suit est un exemple d’obtention des champs d’une classe.
Vous pouvez obtenir tous les champs publics modifiés via la méthode getFields() de l'objet Class, par exemple :
Field[] fields = clazz.getFields(); for (Field field : fields) { System.out.println(field.getName()); }
Vous pouvez obtenir le champ public modifié avec le nom spécifié via la méthode getField() de l'objet Class, par exemple :
Field field = clazz.getField("name"); System.out.println(field.getName());
Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName()); }
Field field = clazz.getDeclaredField("name"); System.out.println(field.getName());
#🎜 🎜#Une fois que nous avons obtenu les informations de classe, nous pouvons utiliser la réflexion pour faire fonctionner des classes et des objets, comme créer des objets, appeler des méthodes et accéder aux propriétés. Ce qui suit est un exemple de création d'objets et d'accès aux propriétés.
Vous pouvez créer des objets via la méthode newInstance() de l'objet Class, par exemple :
MyClass obj = (MyClass) clazz.newInstance();
Field field = clazz.getDeclaredField("name"); field.setAccessible(true); field.set(obj, "张三"); String name = (String) field.get(obj);
4.2 Analyse du fichier de configuration
4.3 Proxy dynamique
Avantages et inconvénients de la réflexion
En raison de la nécessité d'obtenir et d'exploiter dynamiquement les informations de classe au moment de l'exécution, les opérations de réflexion fonctionnent généralement moins bien que l'opération directe des classes, ce qui constitue un défaut de la réflexion. L'utilisation de la réflexion réduit la lisibilité du code, car le code qui appelle les méthodes d'un objet ou accède aux propriétés est généralement plus simple et plus clair que le code qui utilise la réflexion.
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!