Énoncé du problème :
Java Reflection peut-il être utilisé pour récupérer les noms de variables déclarées localement ? Étant donné un extrait de code comme :
Foo b = new Foo(); Foo a = new Foo(); Foo r = new Foo();
Pouvons-nous développer une méthode qui identifie les noms de variables, tels que :
public void baz(Foo... foos) { for (Foo foo : foos) { // Print the name of each foo - b, a, and r System.out.println(***); // Placeholder for variable name access } }
Solution :
Jusqu'à Java 8, la récupération des noms de variables locales via la réflexion n'était pas possible. Cependant, une prise en charge partielle a été introduite dans cette version. Les noms de paramètres, un type spécialisé de variables locales, sont devenus accessibles grâce à la réflexion. Cela s'est avéré utile pour remplacer des annotations telles que @ParameterName, couramment utilisées par les frameworks d'injection de dépendances.
Pour des informations plus complètes sur le nom des variables locales, l'examen des fichiers de classe peut offrir des informations. Lors de la compilation, les techniques d'optimisation éliminent parfois ces données pour économiser de l'espace. Cependant, s'il existe, l'attribut de table de variables locales d'une méthode répertorie les types et les noms des variables dans leurs portées d'instructions respectives.
Les outils d'ingénierie de bytecode tels qu'ASM peuvent potentiellement fournir des mécanismes pour inspecter ces informations au moment de l'exécution. Étant donné l'application de niche de cette capacité principalement dans les environnements de développement, ces bibliothèques offrent des capacités complémentaires au-delà de la simple extraction des noms de variables.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3