Mi pregunta principal: sé que puede generar genéricamente campos de clase con reflexión, incluso si no conoce los nombres de las variables, los tipos o incluso cuántos hay. Sin embargo, ¿hay alguna manera de enumerar todas las variables dentro de la función actual o del alcance actual, suponiendo que no sé cuáles son los nombres de las variables?¿Cómo enumero todas las variables locales dentro de un método/función de Java?
En otras palabras:
int x = 5;
int y = 42;
// some more code
//Now I want to println x and y, but assuming I cannot use "x" or "y".
También sería feliz con una respuesta a esta pregunta: ¿ Digamos que se me permite almacenar los nombres de todas las variables, ayuda eso? e.g .:
Set<String> varNames = new HashSet<String>();
int x = 5;
varNames.add("x");
int y = 42;
varNames.add("y");
// some more code
//Now with varNames, can I output x and y without using "x" or "y"?
¿Por qué estoy preguntando esto? Estoy traduciendo el (los) idioma (s) XYZ a java usando ANTLR, y me gustaría proporcionar un método simple para mostrar todo el estado del programa en cualquier momento.
Tercera solución posible Me alegraría: si esto no es posible en Java, ¿hay alguna manera de escribir código de bytes para una función que visita la función de llamada y examina la pila? Esto también resolvería el problema.
Lo que sería increíble si Java tuviera el equivalente de Python's eval()
o php's get_defined_vars()
.
Si hace una diferencia, estoy usando Java 6, pero cualquier cosa para Java 5, 6 o 7 debería ser buena.
Gracias!
quizás esta pregunta está relacionada (http://stackoverflow.com/questions/2946279/how-do-i-print-the-method-body-reflectively) – user1406062