Inspection des classes avec la réflexion
Récupérez des objets Class et inspectez les champs, les méthodes, les constructeurs et les annotations à l’exécution.
Inspection des classes avec la réflexion est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Qu’est-ce que la réflexion ?
La réflexion permet à un programme Java d’inspecter et de manipuler sa propre structure à l’exécution : lire les noms de classes, les champs, les méthodes, les constructeurs et les annotations sans les connaître au moment de la compilation.
Obtenir un objet Class
Obtenez un objet Class<?> à l’aide du littéral, de getClass() ou de Class.forName().
Class<String> c1 = String.class; // literal
Class<?> c2 = "hello".getClass(); // from instance
Class<?> c3 = Class.forName("java.util.ArrayList"); // by nameInspecter les métadonnées d’une classe
Récupérez le nom de la classe, son paquetage, sa superclasse et ses interfaces implémentées à partir de l’objet Class.
Class<?> c = ArrayList.class;
System.out.println(c.getName()); // java.util.ArrayList
System.out.println(c.getSimpleName()); // ArrayList
System.out.println(c.getSuperclass()); // class java.util.AbstractList
for (Class<?> iface : c.getInterfaces()) System.out.println(iface.getName());Répertorier les champs déclarés
getDeclaredFields() renvoie tous les champs déclarés dans la classe, y compris les champs privés. getFields() renvoie uniquement les champs publics, y compris ceux qui sont hérités.
for (Field f : User.class.getDeclaredFields()) {
System.out.printf("%-10s %s%n", f.getType().getSimpleName(), f.getName());
}Répertorier les méthodes
getDeclaredMethods() répertorie toutes les méthodes, quel que soit leur niveau d’accès. Utilisez getMethods() pour obtenir les méthodes publiques, y compris celles qui sont héritées.
for (Method m : String.class.getDeclaredMethods()) {
System.out.println(m.getName() + " -> " + m.getReturnType().getSimpleName());
}Inspecter les paramètres des méthodes
Récupérez les types et les noms des paramètres (l’option de compilation -parameters est requise), ainsi que les annotations.
Method m = UserService.class.getDeclaredMethod("findById", Long.class);
for (Parameter p : m.getParameters()) {
System.out.println(p.getType().getSimpleName() + " " + p.getName());
}Répertorier les constructeurs
Inspectez les constructeurs comme les méthodes. getDeclaredConstructors() inclut les constructeurs privés utilisés dans les singletons ou les générateurs.
for (Constructor<?> c : User.class.getDeclaredConstructors()) {
System.out.println(Arrays.toString(c.getParameterTypes()));
}Lire les annotations
Récupérez les annotations présentes sur la classe, la méthode ou le champ. Vérifiez leur présence avec isAnnotationPresent et obtenez leur valeur avec getAnnotation.
@RestController
@RequestMapping("/users")
public class UserController {}
// Inspection:
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println("Path: " + Arrays.toString(rm.value()));Vérifier les modificateurs
Utilisez Modifier.isPublic(), isStatic(), isFinal(), etc., sur les modificateurs des champs, des méthodes ou des classes pour filtrer selon la visibilité.
for (Field f : User.class.getDeclaredFields()) {
int mod = f.getModifiers();
if (Modifier.isPrivate(mod)) System.out.println("private: " + f.getName());
}Vérifier isAssignableFrom et instanceof
Utilisez Class.isAssignableFrom() pour vérifier la compatibilité des types par programmation — c’est l’équivalent de instanceof, mais avec des objets de classe connus uniquement à l’exécution.
Class<?> parent = Collection.class;
Class<?> child = ArrayList.class;
System.out.println(parent.isAssignableFrom(child)); // true
System.out.println(child.isAssignableFrom(parent)); // falseAttention aux performances
La réflexion est 10 à 50 fois plus lente que le code direct pour accéder simplement à des champs ou à des méthodes. Mettez en cache les objets Field et Method : appelez setAccessible(true) une seule fois, puis réutilisez-les.
private static final Field NAME_FIELD;
static {
try { NAME_FIELD = User.class.getDeclaredField("name"); NAME_FIELD.setAccessible(true); }
catch (NoSuchFieldException e) { throw new RuntimeException(e); }
}Vérification rapide
Quelle méthode renvoie les champs privés d’une classe, mais pas ceux qui sont hérités ?
Récapitulatif
Obtenez Class à l’aide de littéraux ou de forName(). Utilisez getDeclaredFields/Methods/Constructors pour inspecter tous les niveaux d’accès. Lisez les annotations avec getAnnotation. Mettez les objets de réflexion en cache pour améliorer les performances.
Questions Fréquemment Posées
La leçon « Inspection des classes avec la réflexion » est-elle gratuite ?
Oui — le texte complet de « Inspection des classes avec la réflexion » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Inspection des classes avec la réflexion » ?
Récupérez des objets Class et inspectez les champs, les méthodes, les constructeurs et les annotations à l’exécution. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Inspection des classes avec la réflexion » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Inspection des classes avec la réflexion
- Appeler des méthodes et accéder aux champs
- Proxys dynamiques avec InvocationHandler
- Performances de la réflexion et solutions de remplacement