Maison > Java > javaDidacticiel > Comment définir et utiliser la réflexion Java

Comment définir et utiliser la réflexion Java

WBOY
Libérer: 2023-05-22 19:35:10
avant
1344 Les gens l'ont consulté

    Définition

    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.

    Obtenir un objet de classe

    En Java, il existe trois façons d'obtenir un objet de classe :

    1.1 Obtenir un objet de classe par nom 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");
    Copier après la connexion

    1.2 Obtention de l'objet Class via l'objet

    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();
    Copier après la connexion

    1.3 Obtenez un objet de classe via une constante littérale de classe

    Utilisez une constante littérale de classe pour obtenir un objet de classe, par exemple :

    Class<?> clazz = MyClass.class;
    Copier après la connexion

    Get l'objet de classe Informations

    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.

    2.1 Récupérer tous les champs

    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());
    }
    Copier après la connexion

    2.2 Récupérer le champ spécifié

    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());
    Copier après la connexion

    2.3 Récupérer tout champs déclarés

    #🎜 🎜#Vous pouvez obtenir tous les champs déclarés via la méthode getDeclaredFields() de l'objet Class, y compris les champs publics, protégés et privés modifiés, par exemple :

    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        System.out.println(field.getName());
    }
    Copier après la connexion

    2.4 Récupérer les champs déclarés spécifiés

    #🎜 🎜#Vous pouvez obtenir les champs déclarés du nom spécifié via la méthode getDeclaredField() de l'objet Class, y compris les champs modifiés par public, protected et private, par exemple : #🎜 🎜#
    Field field = clazz.getDeclaredField("name");
    System.out.println(field.getName());
    Copier après la connexion

    Classes et objets d'opération

    #🎜 🎜#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.

    3.1 Création d'objets

    Vous pouvez créer des objets via la méthode newInstance() de l'objet Class, par exemple :

    MyClass obj = (MyClass) clazz.newInstance();
    Copier après la connexion

    3.2 Accéder aux propriétés # 🎜🎜#

    Vous pouvez accéder aux propriétés d'un objet par réflexion, notamment en obtenant et en définissant les valeurs des propriétés. Par exemple :

    Field field = clazz.getDeclaredField("name");
    field.setAccessible(true);
    field.set(obj, "张三");
    String name = (String) field.get(obj);
    Copier après la connexion
    Le code ci-dessus obtient d'abord l'attribut de nom de la classe et le définit comme accessible, puis définit la valeur d'attribut sur "Zhang San" par réflexion, et enfin obtient la valeur d'attribut et attribue pour nommer la variable.

    Scénarios d'application Reflection

    Reflection est largement utilisé en Java. Les scénarios courants incluent :

    4.1 Injection de dépendances

    # 🎜🎜#Dépendance. L'injection est une méthode d'injection dynamique de dépendances dans une classe par réflexion. Par exemple, l'injection de dépendances dans le framework Spring est implémentée par réflexion.

    4.2 Analyse du fichier de configuration

    En Java, les fichiers de configuration tels que XML et JSON peuvent être analysés par réflexion et les données du fichier de configuration peuvent être converties en objets Java.

    4.3 Proxy dynamique

    Le proxy dynamique est une méthode de génération de classes proxy par réflexion. Les proxys dynamiques permettent de générer des objets proxy au moment de l'exécution pour améliorer ou intercepter les objets cibles.

    Avantages et inconvénients de la réflexion

    La flexibilité et l'évolutivité de Java peuvent être obtenues en obtenant et en exploitant dynamiquement les informations de classe au moment de l'exécution, ce qui constitue l'avantage de la réflexion. La réflexion peut réaliser certaines fonctions qui ne peuvent pas être réalisées par les méthodes traditionnelles, telles que le proxy dynamique, l'injection de dépendances, etc.

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    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
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal