2

我想在运行时在 Java 文件中查找实例变量的行号。到目前为止我的理解,它可以通过java反射来完成,但不知道该怎么做。

提前致谢

4

1 回答 1

2

简短的回答:不,做不到。

如果您想在运行时获取任何类型的行号信息,首先必须确保您的类已经编译并保留了行号信息。如果您不拥有这些类文件,则无法保证。

其次,不清楚你想要什么:变量声明的行号或变量的初始化,或对变量的另一个赋值。如果它是声明(没有赋值),那么无论如何都不会保留行信息(我认为 - 尝试在没有赋值的变量声明上放置一个调试断点,你就会明白)。您可以在带有断点的调试器中观察到另外两种可能性,但无法以编程方式捕获特定语句。

最后,运行时将在堆栈跟踪中显示行号,但显然只有当您强制抛出异常或使用Thread.currentThread().getStackTrace()时,这意味着您必须访问和修改您想要测试的每个可能的行号的代码。

我想这可能会通过一些自定义注释变得更容易一些(使用方面编程),它会在注释出现的任何地方插入代码以输出行号,但您仍然必须注释您感兴趣的任何行。

反射不会给你行号。

于 2013-11-06T22:22:23.400 回答