recherche
MaisonJavajavaDidacticielComment définir et utiliser la réflexion Java

    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");

    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();

    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;

    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());
    }

    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());

    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());
    }

    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());

    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();

    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);

    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!

    Déclaration
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
    Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Comment utiliser Maven ou Gradle pour la gestion avancée de projet Java, la création d'automatisation et la résolution de dépendance?Mar 17, 2025 pm 05:46 PM

    L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.

    How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

    L'article discute de la création et de l'utilisation de bibliothèques Java personnalisées (fichiers JAR) avec un versioning approprié et une gestion des dépendances, à l'aide d'outils comme Maven et Gradle.

    Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave?Mar 17, 2025 pm 05:44 PM

    L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

    Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Comment puis-je utiliser JPA (Java Persistance API) pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux?Mar 17, 2025 pm 05:43 PM

    L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

    Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation?Mar 17, 2025 pm 05:35 PM

    Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

    See all articles

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Commandes de chat et comment les utiliser
    1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    Télécharger la version Mac de l'éditeur Atom

    Télécharger la version Mac de l'éditeur Atom

    L'éditeur open source le plus populaire

    Adaptateur de serveur SAP NetWeaver pour Eclipse

    Adaptateur de serveur SAP NetWeaver pour Eclipse

    Intégrez Eclipse au serveur d'applications SAP NetWeaver.

    Listes Sec

    Listes Sec

    SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

    VSCode Windows 64 bits Télécharger

    VSCode Windows 64 bits Télécharger

    Un éditeur IDE gratuit et puissant lancé par Microsoft