如何在Java中获取参数的变量名称

时间:2012-11-20 00:13:36

标签: java parameters

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

或者,通常,有没有办法找出使用的变量的名称 调用方法将该值传递给调用的方法?提前致谢。

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

2 个答案:

答案 0 :(得分:2)

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

如果你想要的是可能的,那就是通过StackTraceElement,但是看看API,就没有你想要的了。

答案 1 :(得分:2)

这不可行的原因不止一个。最重要的是:

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

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

doLog(foo, "foo");
doLog(new Foo(), "new Foo()");
/*or*/ doLog(new Foo(), null);