Maison > Java > javaDidacticiel > Java Reflection peut-il accéder aux noms de variables locales ?

Java Reflection peut-il accéder aux noms de variables locales ?

Patricia Arquette
Libérer: 2024-12-18 18:49:10
original
335 Les gens l'ont consulté

Can Java Reflection Access Local Variable Names?

Java Reflection : dévoilement des noms de variables locales

Java Reflection fournit un mécanisme puissant pour inspecter et manipuler les métadonnées des classes, des méthodes et des champs au moment de l'exécution. Cependant, accéder aux noms des variables locales a toujours présenté un défi.

Approches héritées utilisant l'ingénierie du bytecode

Avant Java 8, les fichiers de classe générés par le compilateur contenaient informations sur les noms de variables locales. Cependant, ces informations sont souvent optimisées pour gagner de la place. Néanmoins, des bibliothèques d'ingénierie de bytecode telles que ASM peuvent être utilisées pour inspecter l'attribut de table de variables locales dans les fichiers de classe, en extrayant les noms de variables si disponibles. Cette approche convient principalement aux outils de développement plutôt qu'au code de production.

Java 8 et au-delà : dévoilement des noms de paramètres

Avec l'introduction de Java 8, prise en charge limitée des les noms de variables ont été ajoutés. Plus précisément, les noms de paramètres, qui constituent un type spécial de variable locale, sont désormais accessibles via la réflexion. Cela permet le remplacement des annotations telles que @ParameterName utilisées dans les conteneurs d'injection de dépendances.

Implémentation pratique

Pour illustrer l'utilisation de la prise en charge de Java 8 pour les noms de paramètres, considérez ce qui suit code :

public void baz(Foo... foos) {
    for (Foo foo : foos) {
        // Print the name of each foo - b, a, and r
        System.out.println(foo.getName());
    }
}
Copier après la connexion

Dans cet exemple, nous supposons que chaque instance Foo a une méthode getter nommée getName(). En utilisant la réflexion, nous pouvons récupérer les noms des paramètres de la méthode baz :

Method method = MyClass.class.getMethod("baz", Foo[].class);
for (Parameter parameter : method.getParameters()) {
    System.out.println(parameter.getName());
}
Copier après la connexion

Cette approche imprimera les noms des paramètres, qui dans ce cas seraient "foos". Bien qu'il ne fournisse pas une solution complète pour accéder aux noms de toutes les variables locales, il représente une amélioration utile des capacités de Java Reflection dans le contexte de l'accès aux paramètres.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal