如何列出Java方法/函数中的所有局部变量?

Arcymag:

我的主要问题是:我知道即使不知道变量名,类型,甚至不知道变量的数量,也可以通过反射来输出类字段。但是,假设我不知道变量名是什么,有没有办法列出当前函数或当前范围内的所有变量?

换一种说法:

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".

我也很乐于回答这个问题:假设我可以存储所有变量的名称,这有帮助吗?例如:

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"?

我为什么要问这个?我正在使用ANTLR将XYZ语言转换为Java,并且我想提供一种简单的方法来在任何时间点输出程序的整个状态。

我可能会满意的第三个可能的解决方案:如果在Java中无法做到这一点,我是否可以通过任何方式为访问调用函数并检查堆栈的函数编写字节码?这也将解决问题。

如果Java具有与Python eval()或php 相当的功能,那将是惊人get_defined_vars()

如果有所不同,我正在使用Java 6,但是Java 5、6或7的任何东西都应该不错。

谢谢!

乔恩·斯基特(Jon Skeet):

据我所知,你不能。至少不是普通的Java代码。如果您能够在运行字节码之前通过某种后处理器运行它,并且假设您仍在使用调试符号进行构建,则可以自动生成代码以进行编码-但我不相信有通过反射访问当前堆栈框架中的局部变量的任何方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章