2

我将一个对象作为参数传递给一个方法。我想知道那个对象的名称——我一直用来将对象传递给方法的特定引用变量。有没有办法找到这个?

或者,一般来说,有没有办法找出调用方法用来将该值传递给被调用方法的变量名称?提前致谢。

注意- 关于上面的第一个 Q:我知道一个对象可以有许多指向它的句柄。这是一个参数名称是否在方法中得到某种“特别关注”的问题,或者一旦它们传递了值就没有任何问题。

4

2 回答 2

2

我相信您所要求的不仅仅是 Java 放在堆栈上的信息。JVM在获取变量持有的句柄并将其放入堆栈以调用方法时,没有理由记录变量的名称。事实上,通常没有真正的理由在编译后保留该名称。如果你能提供更多关于你为什么想做这样的事情的信息,你可能会得到更合理的回应。

如果您想要的东西是可能的,那将是通过StackTraceElement,但看看 API,没有什么像您所要求的那样。

于 2012-11-20T00:21:21.567 回答
2

这样做行不通的原因不止一个。最重要的是:

函数的参数不必是变量。您可以请求表达式的文本表示,但这需要与程序一起存储大量未使用的数据。甚至变量名都没有与程序一起存储。编译保留的唯一变量名称是静态和实例字段和方法。即使那样,也没有办法(除了试图反编译调用者)来访问调用表达式。

如果您需要一个函数来获取此类数据,则需要将其作为单独的参数提供:

doLog(foo, "foo");
doLog(new Foo(), "new Foo()");
/*or*/ doLog(new Foo(), null);
于 2012-11-20T00:30:06.217 回答